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}