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}