Skip to content

Commit 5f8bc1f

Browse files
codgen: Allow renaming objects/enums/flags
1 parent d3c2779 commit 5f8bc1f

File tree

6 files changed

+111
-57
lines changed

6 files changed

+111
-57
lines changed

book/src/config_api.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,8 @@ Sometimes Gir understands the object definition incorrectly or the `.gir` file c
8989
[[object]]
9090
# object's fullname
9191
name = "Gtk.SomeClass"
92+
# An optional different name of the object
93+
rename = "Gtk.SomeNewName"
9294
# can be also "manual" and "ignore" but it's simpler to just put the object in the same array
9395
status = "generate"
9496
# replace the parameter name for the child in child properties (instead "child")

src/codegen/enums.rs

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ pub fn generate(env: &Env, root_path: &Path, mod_rs: &mut Vec<String>) {
5555
mod_rs.push(format!(
5656
"{} use self::enums::{};",
5757
enum_analysis.visibility.export_visibility(),
58-
enum_.name
58+
config.rename.as_ref().unwrap_or(&enum_.name)
5959
));
6060

6161
generate_enum(env, w, enum_, config, enum_analysis)?;
@@ -132,8 +132,12 @@ fn generate_enum(
132132
writeln!(w, "#[derive(Clone, Copy)]")?;
133133
writeln!(w, "#[non_exhaustive]")?;
134134
doc_alias(w, &enum_.c_type, "", 0)?;
135+
if config.rename.is_some() {
136+
doc_alias(w, &enum_.name, "", 0)?;
137+
}
135138

136-
writeln!(w, "{} enum {} {{", analysis.visibility, enum_.name)?;
139+
let enum_name = config.rename.as_ref().unwrap_or(&enum_.name);
140+
writeln!(w, "{} enum {} {{", analysis.visibility, enum_name)?;
137141
for member in &members {
138142
cfg_deprecated(
139143
w,
@@ -208,7 +212,7 @@ fn generate_enum(
208212
"impl fmt::Display for {0} {{\n\
209213
\tfn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {{\n\
210214
\t\twrite!(f, \"{0}::{{}}\", match *self {{",
211-
enum_.name
215+
enum_name
212216
)?;
213217
for member in &members {
214218
version_condition_no_doc(w, env, None, member.version, false, 3)?;
@@ -236,7 +240,7 @@ impl IntoGlib for {name} {{
236240
fn into_glib(self) -> {sys_crate_name}::{ffi_name} {{
237241
match self {{",
238242
sys_crate_name = sys_crate_name,
239-
name = enum_.name,
243+
name = enum_name,
240244
ffi_name = enum_.c_type
241245
)?;
242246
for member in &members {
@@ -274,7 +278,7 @@ impl FromGlib<{sys_crate_name}::{ffi_name}> for {name} {{
274278
unsafe fn from_glib(value: {sys_crate_name}::{ffi_name}) -> Self {{
275279
{assert}match value {{",
276280
sys_crate_name = sys_crate_name,
277-
name = enum_.name,
281+
name = enum_name,
278282
ffi_name = enum_.c_type,
279283
assert = assert
280284
)?;
@@ -308,7 +312,7 @@ impl FromGlib<{sys_crate_name}::{ffi_name}> for {name} {{
308312
"impl ErrorDomain for {name} {{
309313
fn domain() -> Quark {{
310314
{assert}",
311-
name = enum_.name,
315+
name = enum_name,
312316
assert = assert
313317
)?;
314318

@@ -390,7 +394,7 @@ impl FromGlib<{sys_crate_name}::{ffi_name}> for {name} {{
390394
}}
391395
}}",
392396
sys_crate_name = sys_crate_name,
393-
name = enum_.name,
397+
name = enum_name,
394398
get_type = get_type
395399
)?;
396400
writeln!(w)?;
@@ -402,7 +406,7 @@ impl FromGlib<{sys_crate_name}::{ffi_name}> for {name} {{
402406
"impl {valuetype} for {name} {{
403407
type Type = Self;
404408
}}",
405-
name = enum_.name,
409+
name = enum_name,
406410
valuetype = use_glib_type(env, "value::ValueType"),
407411
)?;
408412
writeln!(w)?;
@@ -418,7 +422,7 @@ impl FromGlib<{sys_crate_name}::{ffi_name}> for {name} {{
418422
{assert}from_glib({glib}(value.to_glib_none().0))
419423
}}
420424
}}",
421-
name = enum_.name,
425+
name = enum_name,
422426
glib = use_glib_type(env, "gobject_ffi::g_value_get_enum"),
423427
gvalue = use_glib_type(env, "Value"),
424428
genericwrongvaluetypechecker = use_glib_type(env, "value::GenericValueTypeChecker"),
@@ -443,7 +447,7 @@ impl FromGlib<{sys_crate_name}::{ffi_name}> for {name} {{
443447
Self::static_type()
444448
}}
445449
}}",
446-
name = enum_.name,
450+
name = enum_name,
447451
glib = use_glib_type(env, "gobject_ffi::g_value_set_enum"),
448452
gvalue = use_glib_type(env, "Value"),
449453
gtype = use_glib_type(env, "Type"),
@@ -455,7 +459,7 @@ impl FromGlib<{sys_crate_name}::{ffi_name}> for {name} {{
455459
w,
456460
env,
457461
config,
458-
&enum_.name,
462+
enum_name,
459463
enum_.version,
460464
enum_.members.iter(),
461465
|member| {

src/codegen/flags.rs

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ pub fn generate(env: &Env, root_path: &Path, mod_rs: &mut Vec<String>) {
5353
mod_rs.push(format!(
5454
"{} use self::flags::{};",
5555
flags_analysis.visibility.export_visibility(),
56-
flags.name
56+
config.rename.as_ref().unwrap_or(&flags.name),
5757
));
5858
generate_flags(env, w, flags, config, flags_analysis)?;
5959
}
@@ -92,11 +92,16 @@ fn generate_flags(
9292
derives(w, d, 1)?;
9393
}
9494

95+
let flags_name = config.rename.as_ref().unwrap_or(&flags.name);
96+
9597
doc_alias(w, &flags.c_type, "", 1)?;
98+
if config.rename.is_some() {
99+
doc_alias(w, &flags.name, "", 0)?;
100+
}
96101
writeln!(
97102
w,
98103
" {} struct {}: u32 {{",
99-
analysis.visibility, flags.name
104+
analysis.visibility, flags_name
100105
)?;
101106
for member in &flags.members {
102107
let member_config = config.members.matched(&member.name);
@@ -184,14 +189,14 @@ fn generate_flags(
184189
\t\t<Self as fmt::Debug>::fmt(self, f)\n\
185190
\t}}\n\
186191
}}\n",
187-
flags.name
192+
flags_name
188193
)?;
189194
}
190195
generate_default_impl(
191196
w,
192197
env,
193198
config,
194-
&flags.name,
199+
flags_name,
195200
flags.version,
196201
flags.members.iter(),
197202
|member| {
@@ -222,7 +227,7 @@ impl IntoGlib for {name} {{
222227
}}
223228
",
224229
sys_crate_name = sys_crate_name,
225-
name = flags.name,
230+
name = flags_name,
226231
ffi_name = flags.c_type
227232
)?;
228233

@@ -244,7 +249,7 @@ impl FromGlib<{sys_crate_name}::{ffi_name}> for {name} {{
244249
}}
245250
",
246251
sys_crate_name = sys_crate_name,
247-
name = flags.name,
252+
name = flags_name,
248253
ffi_name = flags.c_type,
249254
assert = assert
250255
)?;
@@ -266,7 +271,7 @@ impl FromGlib<{sys_crate_name}::{ffi_name}> for {name} {{
266271
}}
267272
}}",
268273
sys_crate_name = sys_crate_name,
269-
name = flags.name,
274+
name = flags_name,
270275
get_type = get_type
271276
)?;
272277
writeln!(w)?;
@@ -278,7 +283,7 @@ impl FromGlib<{sys_crate_name}::{ffi_name}> for {name} {{
278283
"impl {valuetype} for {name} {{
279284
type Type = Self;
280285
}}",
281-
name = flags.name,
286+
name = flags_name,
282287
valuetype = use_glib_type(env, "value::ValueType"),
283288
)?;
284289
writeln!(w)?;
@@ -294,7 +299,7 @@ impl FromGlib<{sys_crate_name}::{ffi_name}> for {name} {{
294299
{assert}from_glib({glib}(value.to_glib_none().0))
295300
}}
296301
}}",
297-
name = flags.name,
302+
name = flags_name,
298303
glib = use_glib_type(env, "gobject_ffi::g_value_get_flags"),
299304
gvalue = use_glib_type(env, "Value"),
300305
genericwrongvaluetypechecker = use_glib_type(env, "value::GenericValueTypeChecker"),
@@ -319,7 +324,7 @@ impl FromGlib<{sys_crate_name}::{ffi_name}> for {name} {{
319324
Self::static_type()
320325
}}
321326
}}",
322-
name = flags.name,
327+
name = flags_name,
323328
glib = use_glib_type(env, "gobject_ffi::g_value_set_flags"),
324329
gvalue = use_glib_type(env, "Value"),
325330
gtype = use_glib_type(env, "Type"),

0 commit comments

Comments
 (0)