codama_koroks/
korok.rs

1use codama_attributes::Attributes;
2use codama_nodes::Node;
3use derive_more::derive::From;
4use std::fmt::Debug;
5
6pub trait KorokTrait: Debug {
7    fn node(&self) -> &Option<Node>;
8    fn set_node(&mut self, node: Option<Node>);
9    fn attributes(&self) -> Option<&Attributes> {
10        None
11    }
12}
13
14#[derive(From, Debug, PartialEq)]
15pub enum Korok<'a, 'b> {
16    Crate(&'b crate::CrateKorok<'a>),
17    Enum(&'b crate::EnumKorok<'a>),
18    EnumVariant(&'b crate::EnumVariantKorok<'a>),
19    Field(&'b crate::FieldKorok<'a>),
20    Fields(&'b crate::FieldsKorok<'a>),
21    FileModule(&'b crate::FileModuleKorok<'a>),
22    Item(&'b crate::ItemKorok<'a>),
23    Module(&'b crate::ModuleKorok<'a>),
24    Root(&'b crate::RootKorok<'a>),
25    Struct(&'b crate::StructKorok<'a>),
26    UnsupportedItem(&'b crate::UnsupportedItemKorok<'a>),
27}
28
29#[derive(From, Debug, PartialEq)]
30pub enum KorokMut<'a, 'b> {
31    Crate(&'b mut crate::CrateKorok<'a>),
32    Enum(&'b mut crate::EnumKorok<'a>),
33    EnumVariant(&'b mut crate::EnumVariantKorok<'a>),
34    Field(&'b mut crate::FieldKorok<'a>),
35    Fields(&'b mut crate::FieldsKorok<'a>),
36    FileModule(&'b mut crate::FileModuleKorok<'a>),
37    Item(&'b mut crate::ItemKorok<'a>),
38    Module(&'b mut crate::ModuleKorok<'a>),
39    Root(&'b mut crate::RootKorok<'a>),
40    Struct(&'b mut crate::StructKorok<'a>),
41    UnsupportedItem(&'b mut crate::UnsupportedItemKorok<'a>),
42}
43
44impl KorokTrait for KorokMut<'_, '_> {
45    fn node(&self) -> &Option<Node> {
46        match self {
47            Self::Crate(k) => k.node(),
48            Self::Enum(k) => k.node(),
49            Self::EnumVariant(k) => k.node(),
50            Self::Field(k) => k.node(),
51            Self::Fields(k) => k.node(),
52            Self::FileModule(k) => k.node(),
53            Self::Item(k) => k.node(),
54            Self::Module(k) => k.node(),
55            Self::Root(k) => k.node(),
56            Self::Struct(k) => k.node(),
57            Self::UnsupportedItem(k) => k.node(),
58        }
59    }
60
61    fn set_node(&mut self, node: Option<Node>) {
62        match self {
63            Self::Crate(k) => k.set_node(node),
64            Self::Enum(k) => k.set_node(node),
65            Self::EnumVariant(k) => k.set_node(node),
66            Self::Field(k) => k.set_node(node),
67            Self::Fields(k) => k.set_node(node),
68            Self::FileModule(k) => k.set_node(node),
69            Self::Item(k) => k.set_node(node),
70            Self::Module(k) => k.set_node(node),
71            Self::Root(k) => k.set_node(node),
72            Self::Struct(k) => k.set_node(node),
73            Self::UnsupportedItem(k) => k.set_node(node),
74        }
75    }
76
77    fn attributes(&self) -> Option<&Attributes> {
78        match self {
79            Self::Crate(k) => k.attributes(),
80            Self::Enum(k) => k.attributes(),
81            Self::EnumVariant(k) => k.attributes(),
82            Self::Field(k) => k.attributes(),
83            Self::Fields(k) => k.attributes(),
84            Self::FileModule(k) => k.attributes(),
85            Self::Item(k) => k.attributes(),
86            Self::Module(k) => k.attributes(),
87            Self::Root(k) => k.attributes(),
88            Self::Struct(k) => k.attributes(),
89            Self::UnsupportedItem(k) => k.attributes(),
90        }
91    }
92}