teo_runtime/struct/
struct.rs1use 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}