Skip to main content

rusteal_codegen/
schema.rs

1#![allow(dead_code)]
2
3use serde::{Deserialize, Deserializer};
4
5#[derive(Deserialize)]
6pub struct ClassesFile {
7    pub classes: Vec<ClassInfo>,
8}
9
10#[derive(Deserialize)]
11pub struct StructsFile {
12    pub structs: Vec<StructInfo>,
13}
14
15#[derive(Deserialize)]
16pub struct EnumsFile {
17    pub enums: Vec<EnumInfo>,
18}
19
20#[derive(Deserialize, Clone)]
21pub struct ClassInfo {
22    pub name: String,
23    pub cpp_name: String,
24    pub package: String,
25    pub header: String,
26    #[serde(default = "default_true")]
27    pub header_public: bool,
28    #[serde(deserialize_with = "deser_flags_u32")]
29    pub class_flags: u32,
30    #[serde(rename = "super")]
31    pub super_class: Option<String>,
32    #[serde(default)]
33    pub interfaces: Vec<String>,
34    #[serde(default)]
35    pub props: Vec<PropertyInfo>,
36    #[serde(default)]
37    pub funcs: Vec<FunctionInfo>,
38}
39
40#[derive(Deserialize, Clone)]
41pub struct StructInfo {
42    pub name: String,
43    pub cpp_name: String,
44    pub package: String,
45    #[serde(default)]
46    pub header: String,
47    #[serde(default = "default_true")]
48    pub header_public: bool,
49    #[serde(deserialize_with = "deser_flags_u32")]
50    pub struct_flags: u32,
51    #[serde(rename = "super")]
52    pub super_struct: Option<String>,
53    #[serde(default)]
54    pub has_static_struct: bool,
55    #[serde(default)]
56    pub props: Vec<PropertyInfo>,
57}
58
59#[derive(Deserialize, Clone)]
60pub struct EnumInfo {
61    pub name: String,
62    pub cpp_name: String,
63    pub package: String,
64    pub underlying_type: String,
65    pub cpp_form: u32,
66    pub pairs: Vec<(String, i64)>,
67}
68
69#[derive(Deserialize, Clone)]
70pub struct PropertyInfo {
71    pub name: String,
72    #[serde(rename = "type")]
73    pub prop_type: String,
74    pub prop_flags: u64,
75    #[serde(default = "default_array_dim")]
76    pub array_dim: u32,
77    pub enum_name: Option<String>,
78    pub enum_cpp_name: Option<String>,
79    pub enum_cpp_form: Option<u32>,
80    pub enum_underlying_type: Option<String>,
81    pub class_name: Option<String>,
82    pub meta_class_name: Option<String>,
83    pub struct_name: Option<String>,
84    pub interface_name: Option<String>,
85    pub func_info: Option<serde_json::Value>,
86    pub inner_prop: Option<Box<PropertyInfo>>,
87    pub key_prop: Option<Box<PropertyInfo>>,
88    pub value_prop: Option<Box<PropertyInfo>>,
89    pub element_prop: Option<Box<PropertyInfo>>,
90    pub getter: Option<String>,
91    pub setter: Option<String>,
92    pub default: Option<String>,
93}
94
95fn default_array_dim() -> u32 {
96    1
97}
98
99#[derive(Deserialize, Clone)]
100pub struct FunctionInfo {
101    pub name: String,
102    #[serde(deserialize_with = "deser_flags_u32")]
103    pub func_flags: u32,
104    #[serde(default)]
105    pub is_static: bool,
106    #[serde(default)]
107    pub params: Vec<ParamInfo>,
108    #[serde(skip)]
109    pub ue_name: String,
110    #[serde(skip)]
111    pub interface: Option<String>,
112}
113
114#[derive(Deserialize, Clone)]
115pub struct ParamInfo {
116    pub name: String,
117    #[serde(rename = "type")]
118    pub prop_type: String,
119    pub prop_flags: u64,
120    pub enum_name: Option<String>,
121    pub enum_cpp_name: Option<String>,
122    pub enum_cpp_form: Option<u32>,
123    pub enum_underlying_type: Option<String>,
124    pub class_name: Option<String>,
125    pub meta_class_name: Option<String>,
126    pub struct_name: Option<String>,
127    pub interface_name: Option<String>,
128    pub func_info: Option<serde_json::Value>,
129    pub inner_prop: Option<Box<PropertyInfo>>,
130    pub key_prop: Option<Box<PropertyInfo>>,
131    pub value_prop: Option<Box<PropertyInfo>>,
132    pub element_prop: Option<Box<PropertyInfo>>,
133    pub default: Option<String>,
134}
135
136pub use rusteal_ue_flags::{
137    CPF_BLUEPRINT_ASSIGNABLE, CPF_BLUEPRINT_READ_ONLY, CPF_BLUEPRINT_VISIBLE, CPF_CONST_PARM,
138    CPF_EDIT, CPF_NATIVE_ACCESS_SPECIFIER_PRIVATE as CPF_NATIVE_ACCESS_PRIVATE,
139    CPF_NATIVE_ACCESS_SPECIFIER_PROTECTED as CPF_NATIVE_ACCESS_PROTECTED, CPF_OUT_PARM,
140    CPF_REFERENCE_PARM, CPF_RETURN_PARM, FUNC_BLUEPRINT_EVENT, FUNC_EDITOR_ONLY, FUNC_NATIVE,
141    FUNC_PROTECTED, FUNC_STATIC,
142};
143
144fn default_true() -> bool {
145    true
146}
147
148fn deser_flags_u32<'de, D: Deserializer<'de>>(d: D) -> Result<u32, D::Error> {
149    let v = i64::deserialize(d)?;
150    Ok(v as u32)
151}