use heromodels::db::Db; use macros::{ register_authorized_create_by_id_fn, register_authorized_delete_by_id_fn, register_authorized_get_by_id_fn, }; use rhai::plugin::*; use rhai::{Engine, EvalAltResult, Module, INT}; use std::mem; use std::sync::Arc; use heromodels::models::core::comment::Comment; type RhaiComment = Comment; use heromodels::db::hero::OurDB; use heromodels::db::Collection; #[export_module] mod rhai_comment_module { use super::{RhaiComment, INT}; #[rhai_fn(name = "new_comment", return_raw)] pub fn new_comment() -> Result> { Ok(Comment::new()) } #[rhai_fn(name = "user_id", return_raw)] pub fn set_user_id( comment: &mut RhaiComment, user_id: i64, ) -> Result> { let owned = std::mem::take(comment); *comment = owned.user_id(user_id as u32); Ok(comment.clone()) } #[rhai_fn(name = "content", return_raw)] pub fn set_content( comment: &mut RhaiComment, content: String, ) -> Result> { let owned = std::mem::take(comment); *comment = owned.content(content); Ok(comment.clone()) } #[rhai_fn(name = "get_comment_id")] pub fn get_comment_id(comment: &mut RhaiComment) -> i64 { comment.id() as i64 } #[rhai_fn(name = "get_comment_user_id")] pub fn get_comment_user_id(comment: &mut RhaiComment) -> i64 { comment.user_id() as i64 } #[rhai_fn(name = "get_comment_content")] pub fn get_comment_content(comment: &mut RhaiComment) -> String { comment.content().clone() } } pub fn register_comment_rhai_module(engine: &mut Engine) { let mut module = exported_module!(rhai_comment_module); register_authorized_create_by_id_fn!( module: &mut module, rhai_fn_name: "save_comment", resource_type_str: "Comment", rhai_return_rust_type: heromodels::models::core::comment::Comment ); register_authorized_get_by_id_fn!( module: &mut module, rhai_fn_name: "get_comment", resource_type_str: "Comment", rhai_return_rust_type: heromodels::models::core::comment::Comment ); register_authorized_delete_by_id_fn!( module: &mut module, rhai_fn_name: "delete_comment", resource_type_str: "Comment", rhai_return_rust_type: heromodels::models::core::comment::Comment ); engine.register_global_module(module.into()); }