aldrin_core/introspection/ir/
function_fallback.rs

1use crate::tags::{self, PrimaryTag, Tag};
2use crate::{Serialize, SerializeError, Serializer};
3use num_enum::{IntoPrimitive, TryFromPrimitive};
4
5#[derive(Debug, Clone)]
6pub struct FunctionFallbackIr {
7    pub(crate) name: String,
8    pub(crate) doc: Option<String>,
9}
10
11impl FunctionFallbackIr {
12    pub fn builder(name: impl Into<String>) -> FunctionFallbackIrBuilder {
13        FunctionFallbackIrBuilder::new(name)
14    }
15
16    pub fn name(&self) -> &str {
17        &self.name
18    }
19
20    pub fn doc(&self) -> Option<&str> {
21        self.doc.as_deref()
22    }
23}
24
25#[derive(IntoPrimitive, TryFromPrimitive)]
26#[repr(u32)]
27enum FunctionFallbackField {
28    Name = 0,
29}
30
31impl Tag for FunctionFallbackIr {}
32
33impl PrimaryTag for FunctionFallbackIr {
34    type Tag = Self;
35}
36
37impl Serialize<FunctionFallbackIr> for &FunctionFallbackIr {
38    fn serialize(self, serializer: Serializer) -> Result<(), SerializeError> {
39        let mut serializer = serializer.serialize_struct2()?;
40
41        serializer.serialize::<tags::String>(FunctionFallbackField::Name, &self.name)?;
42
43        serializer.finish()
44    }
45}
46
47#[derive(Debug, Clone)]
48pub struct FunctionFallbackIrBuilder {
49    name: String,
50    doc: Option<String>,
51}
52
53impl FunctionFallbackIrBuilder {
54    fn new(name: impl Into<String>) -> Self {
55        Self {
56            name: name.into(),
57            doc: None,
58        }
59    }
60
61    pub fn doc(mut self, doc: impl Into<String>) -> Self {
62        self.doc = Some(doc.into());
63        self
64    }
65
66    pub fn finish(self) -> FunctionFallbackIr {
67        FunctionFallbackIr {
68            name: self.name,
69            doc: self.doc,
70        }
71    }
72}