teo_runtime/model/index/
index.rs

1use std::sync::Arc;
2use educe::Educe;
3use serde::Serialize;
4use crate::model::index::item::Item;
5use crate::model::index::r#type;
6
7#[derive(Educe)]
8#[educe(Debug, PartialEq, Eq, Hash)]
9#[derive(Clone)]
10pub struct Index {
11    inner: Arc<Inner>
12}
13
14#[derive(Educe)]
15#[educe(Debug, PartialEq, Eq, Hash)]
16#[derive(Serialize, Clone)]
17struct Inner {
18    pub r#type: r#type::Type,
19    pub name: String,
20    pub items: Vec<Item>,
21    #[serde(skip)]
22    #[educe(PartialEq(ignore))] #[educe(Hash(ignore))]
23    pub keys: Vec<String>,
24}
25
26impl Index {
27
28    pub fn new(r#type: r#type::Type, name: String, items: Vec<Item>) -> Self {
29        let keys = items.iter().map(|i| i.field.clone()).collect();
30        Self {
31            inner: Arc::new(Inner {
32                r#type,
33                name,
34                items,
35                keys,
36            })
37        }
38    }
39
40    pub fn r#type(&self) -> r#type::Type {
41        self.inner.r#type
42    }
43
44    pub fn name(&self) -> &str {
45        self.inner.name.as_str()
46    }
47
48    pub fn items(&self) -> &Vec<Item> {
49        &self.inner.items
50    }
51
52    pub fn keys(&self) -> &Vec<String> {
53        &self.inner.keys
54    }
55}
56
57impl Serialize for Index {
58    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: serde::Serializer {
59        self.inner.serialize(serializer)
60    }
61}