teo_runtime/enum/
enum.rs

1use std::collections::BTreeMap;
2use std::sync::Arc;
3use serde::Serialize;
4use crate::comment::Comment;
5use crate::r#enum::member::Member;
6use crate::traits::documentable::Documentable;
7use crate::traits::named::Named;
8use crate::value::Value;
9
10#[derive(Debug, Clone)]
11pub struct Enum {
12    pub(super) inner: Arc<Inner>
13}
14
15#[derive(Debug, Serialize)]
16pub(super) struct Inner {
17    pub(super) path: Vec<String>,
18    pub(super) comment: Option<Comment>,
19    pub(super) option: bool,
20    pub(super) interface: bool,
21    pub(super) members: Vec<Member>,
22    pub(super) data: BTreeMap<String, Value>,
23    #[serde(skip)]
24    pub(super) member_names: Vec<String>,
25}
26
27impl Enum {
28
29    pub fn path(&self) -> &Vec<String> {
30        &self.inner.path
31    }
32
33    pub fn option(&self) -> bool {
34        self.inner.option
35    }
36
37    pub fn interface(&self) -> bool {
38        self.inner.interface
39    }
40
41    pub fn members(&self) -> &Vec<Member> {
42        &self.inner.members
43    }
44
45    pub fn data(&self) -> &BTreeMap<String, Value> {
46        &self.inner.data
47    }
48
49    pub fn member_names(&self) -> &Vec<String> {
50        &self.inner.member_names
51    }
52}
53
54impl Named for Enum {
55
56    fn name(&self) -> &str {
57        self.inner.path.last().unwrap().as_str()
58    }
59}
60
61impl Documentable for Enum {
62
63    fn comment(&self) -> Option<&Comment> {
64        self.inner.comment.as_ref()
65    }
66
67    fn kind(&self) -> &'static str {
68        "enum"
69    }
70}
71
72impl Serialize for Enum {
73    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: serde::Serializer {
74        self.inner.serialize(serializer)
75    }
76}