156 lines
4.6 KiB
Rust
156 lines
4.6 KiB
Rust
use crate::db::Db;
|
|
use rhailib_macros::{
|
|
register_authorized_create_by_id_fn, register_authorized_delete_by_id_fn, register_authorized_get_by_id_fn,
|
|
};
|
|
use rhai::plugin::*;
|
|
use rhai::{Array, Dynamic, Engine, EvalAltResult, Map, Module};
|
|
use std::collections::HashMap;
|
|
use std::sync::Arc;
|
|
|
|
use crate::models::circle::Circle;
|
|
type RhaiCircle = Circle;
|
|
use crate::db::hero::OurDB;
|
|
use crate::db::Collection;
|
|
use crate::models::circle::ThemeData;
|
|
|
|
#[export_module]
|
|
mod rhai_circle_module {
|
|
use super::RhaiCircle;
|
|
|
|
// this one configures the users own circle
|
|
#[rhai_fn(name = "configure", return_raw)]
|
|
pub fn configure() -> Result<RhaiCircle, Box<EvalAltResult>> {
|
|
Ok(Circle::new())
|
|
}
|
|
|
|
#[rhai_fn(name = "new_circle", return_raw)]
|
|
pub fn new_circle() -> Result<RhaiCircle, Box<EvalAltResult>> {
|
|
Ok(Circle::new())
|
|
}
|
|
|
|
#[rhai_fn(name = "set_title", return_raw)]
|
|
pub fn set_title(
|
|
circle: &mut RhaiCircle,
|
|
title: String,
|
|
) -> Result<RhaiCircle, Box<EvalAltResult>> {
|
|
let owned = std::mem::take(circle);
|
|
*circle = owned.title(title);
|
|
Ok(circle.clone())
|
|
}
|
|
|
|
#[rhai_fn(name = "set_ws_url", return_raw)]
|
|
pub fn set_ws_url(
|
|
circle: &mut RhaiCircle,
|
|
ws_url: String,
|
|
) -> Result<RhaiCircle, Box<EvalAltResult>> {
|
|
let owned = std::mem::take(circle);
|
|
*circle = owned.ws_url(ws_url);
|
|
Ok(circle.clone())
|
|
}
|
|
|
|
#[rhai_fn(name = "set_description", return_raw)]
|
|
pub fn set_description(
|
|
circle: &mut RhaiCircle,
|
|
description: String,
|
|
) -> Result<RhaiCircle, Box<EvalAltResult>> {
|
|
let owned = std::mem::take(circle);
|
|
*circle = owned.description(description);
|
|
Ok(circle.clone())
|
|
}
|
|
|
|
#[rhai_fn(name = "set_logo", return_raw)]
|
|
pub fn set_logo(
|
|
circle: &mut RhaiCircle,
|
|
logo: String,
|
|
) -> Result<RhaiCircle, Box<EvalAltResult>> {
|
|
let owned = std::mem::take(circle);
|
|
*circle = owned.logo(logo);
|
|
Ok(circle.clone())
|
|
}
|
|
|
|
#[rhai_fn(name = "set_theme", return_raw)]
|
|
pub fn set_theme(
|
|
circle: &mut RhaiCircle,
|
|
theme: ThemeData,
|
|
) -> Result<RhaiCircle, Box<EvalAltResult>> {
|
|
let owned = std::mem::take(circle);
|
|
*circle = owned.theme(theme);
|
|
Ok(circle.clone())
|
|
}
|
|
|
|
#[rhai_fn(name = "add_circle", return_raw)]
|
|
pub fn add_circle(
|
|
circle: &mut RhaiCircle,
|
|
new_circle: String,
|
|
) -> Result<RhaiCircle, Box<EvalAltResult>> {
|
|
let owned = std::mem::take(circle);
|
|
*circle = owned.add_circle(new_circle);
|
|
Ok(circle.clone())
|
|
}
|
|
|
|
#[rhai_fn(name = "add_member", return_raw)]
|
|
pub fn add_member(
|
|
circle: &mut RhaiCircle,
|
|
member: String,
|
|
) -> Result<RhaiCircle, Box<EvalAltResult>> {
|
|
let owned = std::mem::take(circle);
|
|
*circle = owned.add_member(member);
|
|
Ok(circle.clone())
|
|
}
|
|
|
|
// --- Getters ---
|
|
#[rhai_fn(name = "get_id")]
|
|
pub fn get_id(c: &mut RhaiCircle) -> i64 {
|
|
c.base_data.id as i64
|
|
}
|
|
#[rhai_fn(name = "get_title")]
|
|
pub fn get_title(c: &mut RhaiCircle) -> String {
|
|
c.title.clone()
|
|
}
|
|
#[rhai_fn(name = "get_ws_url")]
|
|
pub fn get_ws_url(c: &mut RhaiCircle) -> String {
|
|
c.ws_url.clone()
|
|
}
|
|
#[rhai_fn(name = "get_description")]
|
|
pub fn get_description(c: &mut RhaiCircle) -> Option<String> {
|
|
c.description.clone()
|
|
}
|
|
#[rhai_fn(name = "get_logo")]
|
|
pub fn get_logo(c: &mut RhaiCircle) -> Option<String> {
|
|
c.logo.clone()
|
|
}
|
|
#[rhai_fn(name = "get_circles")]
|
|
pub fn get_circles(c: &mut RhaiCircle) -> Array {
|
|
c.circles.iter().map(|s| Dynamic::from(s.clone())).collect()
|
|
}
|
|
#[rhai_fn(name = "get_members")]
|
|
pub fn get_members(c: &mut RhaiCircle) -> Array {
|
|
c.members.iter().map(|s| Dynamic::from(s.clone())).collect()
|
|
}
|
|
}
|
|
|
|
pub fn register_circle_rhai_module(engine: &mut Engine) {
|
|
let mut module = exported_module!(rhai_circle_module);
|
|
|
|
register_authorized_create_by_id_fn!(
|
|
module: &mut module,
|
|
rhai_fn_name: "save_circle",
|
|
resource_type_str: "Circle",
|
|
rhai_return_rust_type: crate::models::circle::Circle
|
|
);
|
|
register_authorized_get_by_id_fn!(
|
|
module: &mut module,
|
|
rhai_fn_name: "get_circle",
|
|
resource_type_str: "Circle",
|
|
rhai_return_rust_type: crate::models::circle::Circle
|
|
);
|
|
register_authorized_delete_by_id_fn!(
|
|
module: &mut module,
|
|
rhai_fn_name: "delete_circle",
|
|
resource_type_str: "Circle",
|
|
rhai_return_rust_type: crate::models::circle::Circle
|
|
);
|
|
|
|
engine.register_global_module(module.into());
|
|
}
|