teo_runtime/struct/object/
mod.rs

1use std::collections::BTreeMap;
2use std::fmt::{Display, Formatter};
3use std::sync::{Arc, Mutex};
4use serde::{Serialize, Serializer};
5use crate::value::Value;
6
7#[derive(Debug, Clone)]
8pub struct Object {
9    inner: Arc<Inner>
10}
11
12impl Object {
13
14    pub fn new(struct_path: Vec<String>, fields: BTreeMap<String, Value>) -> Self {
15        Self {
16            inner: Arc::new(Inner {
17                struct_path,
18                fields: Mutex::new(fields),
19            })
20        }
21    }
22
23    pub fn struct_path(&self) -> Vec<&str> {
24        self.inner.as_ref().struct_path.iter().map(AsRef::as_ref).collect()
25    }
26}
27
28impl Serialize for Object {
29
30    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: Serializer {
31        serializer.serialize_none()
32    }
33}
34
35#[derive(Debug)]
36struct Inner {
37    struct_path: Vec<String>,
38    fields: Mutex<BTreeMap<String, Value>>
39}
40
41impl Display for Object {
42    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
43        f.write_str(&self.inner.struct_path.join("."))
44    }
45}
46