oo_bindgen/model/structs/
function_argument_struct.rs

1use crate::model::*;
2
3/// Types that can be used in a function struct, some of which might have a default value
4#[non_exhaustive]
5#[derive(Clone, Debug)]
6pub enum FunctionArgStructField {
7    Basic(BasicType),
8    String(StringType),
9    Interface(AsynchronousInterface),
10    Struct(UniversalOr<FunctionArgStructField>),
11}
12
13pub type FunctionArgStructHandle = Handle<Struct<FunctionArgStructField, Unvalidated>>;
14
15impl StructFieldType for FunctionArgStructField {
16    fn create_struct_type(
17        v: Handle<Struct<FunctionArgStructField, Unvalidated>>,
18    ) -> StructType<Unvalidated> {
19        StructType::FunctionArg(v)
20    }
21}
22
23impl InitializerValidator for FunctionArgStructField {
24    fn validate_default_value(
25        &self,
26        value: &InitializerDefault,
27    ) -> BindResult<ValidatedDefaultValue> {
28        match self {
29            FunctionArgStructField::Basic(x) => x.validate_default_value(value),
30            FunctionArgStructField::String(x) => x.validate_default_value(value),
31            FunctionArgStructField::Interface(x) => x.inner.validate_default_value(value),
32            FunctionArgStructField::Struct(x) => x.validate_default_value(value),
33        }
34    }
35}
36
37impl From<Primitive> for FunctionArgStructField {
38    fn from(x: Primitive) -> Self {
39        Self::Basic(x.into())
40    }
41}
42
43impl From<BasicType> for FunctionArgStructField {
44    fn from(x: BasicType) -> Self {
45        FunctionArgStructField::Basic(x)
46    }
47}
48
49impl From<StringType> for FunctionArgStructField {
50    fn from(x: StringType) -> Self {
51        FunctionArgStructField::String(x)
52    }
53}
54
55impl From<FunctionArgStructHandle> for FunctionArgStructField {
56    fn from(x: FunctionArgStructHandle) -> Self {
57        FunctionArgStructField::Struct(x.into())
58    }
59}
60
61impl From<UniversalStructHandle> for FunctionArgStructField {
62    fn from(x: UniversalStructHandle) -> Self {
63        Self::Struct(UniversalOr::Universal(x))
64    }
65}
66
67impl From<AsynchronousInterface> for FunctionArgStructField {
68    fn from(x: AsynchronousInterface) -> Self {
69        FunctionArgStructField::Interface(x)
70    }
71}
72
73impl From<DurationType> for FunctionArgStructField {
74    fn from(x: DurationType) -> Self {
75        FunctionArgStructField::Basic(BasicType::Duration(x))
76    }
77}
78
79impl From<Handle<Enum<Unvalidated>>> for FunctionArgStructField {
80    fn from(x: Handle<Enum<Unvalidated>>) -> Self {
81        BasicType::Enum(x).into()
82    }
83}