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