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