Skip to content

Commit 474abad

Browse files
committed
Read signals from JSON API
1 parent 033a131 commit 474abad

File tree

3 files changed

+41
-15
lines changed

3 files changed

+41
-15
lines changed

godot-codegen/src/models/domain.rs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
use crate::context::Context;
1414
use crate::conv;
15-
use crate::models::json::{JsonMethodArg, JsonMethodReturn};
15+
use crate::models::json::{JsonMethodArg, JsonMethodReturn, JsonSignal};
1616
use crate::util::{ident, option_as_slice, safe_ident};
1717

1818
use proc_macro2::{Ident, Literal, TokenStream};
@@ -166,6 +166,7 @@ pub struct Class {
166166
pub constants: Vec<ClassConstant>,
167167
pub enums: Vec<Enum>,
168168
pub methods: Vec<ClassMethod>,
169+
pub signals: Vec<ClassSignal>,
169170
}
170171

171172
impl ClassLike for Class {
@@ -414,8 +415,6 @@ pub struct ClassMethod {
414415
pub surrounding_class: TyName,
415416
}
416417

417-
impl ClassMethod {}
418-
419418
impl Function for ClassMethod {
420419
fn common(&self) -> &FunctionCommon {
421420
&self.common
@@ -443,6 +442,14 @@ impl fmt::Display for ClassMethod {
443442

444443
// ----------------------------------------------------------------------------------------------------------------------------------------------
445444

445+
pub struct ClassSignal {
446+
pub name: String,
447+
pub parameters: Vec<FnParam>,
448+
pub surrounding_class: TyName,
449+
}
450+
451+
// ----------------------------------------------------------------------------------------------------------------------------------------------
452+
446453
#[derive(Copy, Clone, Debug)]
447454
pub enum FnDirection {
448455
/// Godot -> Rust.

godot-codegen/src/models/domain_mapping.rs

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,12 @@
88
use crate::context::Context;
99
use crate::models::domain::{
1010
BuildConfiguration, BuiltinClass, BuiltinMethod, BuiltinSize, BuiltinVariant, Class,
11-
ClassCommons, ClassConstant, ClassConstantValue, ClassMethod, Constructor, Enum, Enumerator,
12-
EnumeratorValue, ExtensionApi, FnDirection, FnParam, FnQualifier, FnReturn, FunctionCommon,
13-
GodotApiVersion, ModName, NativeStructure, Operator, Singleton, TyName, UtilityFunction,
14-
};
15-
use crate::models::json::{
16-
JsonBuiltinClass, JsonBuiltinMethod, JsonBuiltinSizes, JsonClass, JsonClassConstant,
17-
JsonClassMethod, JsonConstructor, JsonEnum, JsonEnumConstant, JsonExtensionApi, JsonHeader,
18-
JsonMethodReturn, JsonNativeStructure, JsonOperator, JsonSingleton, JsonUtilityFunction,
11+
ClassCommons, ClassConstant, ClassConstantValue, ClassMethod, ClassSignal, Constructor, Enum,
12+
Enumerator, EnumeratorValue, ExtensionApi, FnDirection, FnParam, FnQualifier, FnReturn,
13+
FunctionCommon, GodotApiVersion, ModName, NativeStructure, Operator, Singleton, TyName,
14+
UtilityFunction,
1915
};
16+
use crate::models::json::{JsonBuiltinClass, JsonBuiltinMethod, JsonBuiltinSizes, JsonClass, JsonClassConstant, JsonClassMethod, JsonConstructor, JsonEnum, JsonEnumConstant, JsonExtensionApi, JsonHeader, JsonMethodReturn, JsonNativeStructure, JsonOperator, JsonSignal, JsonSingleton, JsonUtilityFunction};
2017
use crate::util::{get_api_level, ident, option_as_slice};
2118
use crate::{conv, special_cases};
2219
use proc_macro2::Ident;
@@ -113,6 +110,14 @@ impl Class {
113110
})
114111
.collect();
115112

113+
let signals = option_as_slice(&json.signals)
114+
.iter()
115+
.map(|s| {
116+
let surrounding_class = &ty_name;
117+
ClassSignal::from_json(s, surrounding_class, ctx)
118+
})
119+
.collect();
120+
116121
Some(Self {
117122
common: ClassCommons {
118123
name: ty_name,
@@ -126,6 +131,7 @@ impl Class {
126131
constants,
127132
enums,
128133
methods,
134+
signals,
129135
})
130136
}
131137
}
@@ -513,6 +519,20 @@ impl ClassMethod {
513519
}
514520
}
515521

522+
impl ClassSignal {
523+
pub fn from_json(
524+
json_signal: &JsonSignal,
525+
surrounding_class: &TyName,
526+
ctx: &mut Context,
527+
) -> Self {
528+
Self {
529+
name: json_signal.name.clone(),
530+
parameters: FnParam::new_range(&json_signal.arguments, ctx),
531+
surrounding_class: surrounding_class.clone(),
532+
}
533+
}
534+
}
535+
516536
impl UtilityFunction {
517537
pub fn from_json(function: &JsonUtilityFunction, ctx: &mut Context) -> Option<Self> {
518538
if special_cases::is_utility_function_deleted(function, ctx) {

godot-codegen/src/models/json.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ pub struct JsonClass {
8080
pub enums: Option<Vec<JsonEnum>>,
8181
pub methods: Option<Vec<JsonClassMethod>>,
8282
// pub properties: Option<Vec<Property>>,
83-
// pub signals: Option<Vec<Signal>>,
83+
pub signals: Option<Vec<JsonSignal>>,
8484
}
8585

8686
#[derive(DeJson)]
@@ -179,10 +179,9 @@ pub struct JsonProperty {
179179
}
180180

181181
#[derive(DeJson)]
182-
#[allow(dead_code)]
183182
pub struct JsonSignal {
184-
name: String,
185-
arguments: Option<Vec<JsonMethodArg>>,
183+
pub name: String,
184+
pub arguments: Option<Vec<JsonMethodArg>>,
186185
}
187186

188187
#[derive(DeJson)]

0 commit comments

Comments
 (0)