teo_runtime/struct/
struct.rs

1use std::collections::BTreeMap;
2use std::fmt::Debug;
3use std::sync::Arc;
4use serde::Serialize;
5use crate::r#struct::function::instance_function;
6use crate::r#struct::function::instance_function::Function;
7use crate::r#struct::function::static_function;
8use crate::r#struct::function::static_function::StaticFunction;
9use crate::utils::next_path;
10
11#[derive(Debug, Serialize, Clone)]
12pub struct Struct {
13    pub path: Vec<String>,
14    #[serde(rename = "staticFunctions")]
15    pub static_functions: BTreeMap<String, static_function::Definition>,
16    pub functions: BTreeMap<String, instance_function::Definition>,
17}
18
19impl Struct {
20
21    pub fn define_static_function<F>(&mut self, name: &str, f: F) where F: 'static + StaticFunction {
22        self.static_functions.insert(name.to_owned(), static_function::Definition {
23            path: next_path(&self.path, name),
24            body: Arc::new(f),
25        });
26    }
27
28    pub fn define_function<F>(&mut self, name: &str, f: F) where F: 'static + Function {
29        self.functions.insert(name.to_owned(), instance_function::Definition {
30            path: next_path(&self.path, name),
31            body: Arc::new(f),
32        });
33    }
34
35    pub fn static_function(&self, name: &str) -> Option<&static_function::Definition> {
36        self.static_functions.get(name)
37    }
38
39    pub fn function(&self, name: &str) -> Option<&instance_function::Definition> {
40        self.functions.get(name)
41    }
42}