gesha_rust_types/
definition.rs

1use crate::{DataType, EnumDef, ModDef, NewTypeDef, PresetDef, RequestBodyDef, StructDef};
2
3#[derive(Clone, Debug, PartialEq)]
4pub enum Definition {
5    StructDef(StructDef),
6    NewTypeDef(NewTypeDef),
7    EnumDef(Box<EnumDef>),
8    PresetDef(PresetDef),
9    RequestBodyDef(RequestBodyDef),
10    ModDef(ModDef),
11}
12
13impl Definition {
14    pub fn any_type<F>(&self, f: F) -> bool
15    where
16        F: Fn(&DataType) -> bool,
17    {
18        match self {
19            Definition::StructDef(x) => x.fields.iter().any(|x| f(&x.data_type)),
20            Definition::NewTypeDef(x) => f(&x.data_type),
21            Definition::EnumDef(_) => false,
22            Definition::PresetDef(_) => false,
23            Definition::RequestBodyDef(_) => false,
24            Definition::ModDef(_) => false,
25        }
26    }
27
28    /// Return the symbol name of the definition.
29    ///
30    /// e.g.
31    /// - struct Foo -> "Foo"
32    /// - mod bar -> "bar"
33    pub fn symbol_name(&self) -> &str {
34        match self {
35            Definition::StructDef(x) => x.symbol_name(),
36            Definition::NewTypeDef(x) => x.symbol_name(),
37            Definition::EnumDef(x) => x.symbol_name(),
38            Definition::PresetDef(x) => x.symbol_name(),
39            Definition::RequestBodyDef(x) => x.symbol_name(),
40            Definition::ModDef(x) => x.symbol_name(),
41        }
42    }
43}