diff --git a/src/analysis/namespaces.rs b/src/analysis/namespaces.rs index f63261aef..9e8ca1752 100644 --- a/src/analysis/namespaces.rs +++ b/src/analysis/namespaces.rs @@ -22,7 +22,7 @@ pub struct Namespace { pub struct Info { namespaces: Vec, pub is_glib_crate: bool, - pub glib_ns_id: NsId, + pub glib_ns_id: Option, } impl Info { @@ -74,6 +74,6 @@ pub fn run(gir: &library::Library) -> Info { Info { namespaces, is_glib_crate, - glib_ns_id: glib_ns_id.expect("Missing `GLib` namespace!"), + glib_ns_id, } } diff --git a/src/analysis/return_value.rs b/src/analysis/return_value.rs index fb9207ea2..9925d4003 100644 --- a/src/analysis/return_value.rs +++ b/src/analysis/return_value.rs @@ -69,7 +69,9 @@ pub fn analyze( ); None } else { - let ns = if env.namespaces.glib_ns_id == namespaces::MAIN { + let ns = if env.namespaces.glib_ns_id.is_none() + || env.namespaces.glib_ns_id == Some(namespaces::MAIN) + { "error" } else { "glib" @@ -91,7 +93,7 @@ pub fn analyze( ); None } else { - let ns = if env.namespaces.glib_ns_id == namespaces::MAIN { + let ns = if env.namespaces.glib_ns_id.is_none() || env.namespaces.glib_ns_id == Some(namespaces::MAIN) { "crate::BoolError" } else { "glib" diff --git a/src/codegen/return_value.rs b/src/codegen/return_value.rs index 42f1112ee..f5824bb5b 100644 --- a/src/codegen/return_value.rs +++ b/src/codegen/return_value.rs @@ -66,7 +66,9 @@ impl ToReturnValue for analysis::return_value::Info { format!( "Result<{}, {}BoolError>", &type_name[7..(type_name.len() - 1)], - if env.namespaces.glib_ns_id == namespaces::MAIN { + if env.namespaces.glib_ns_id.is_none() + || env.namespaces.glib_ns_id == Some(namespaces::MAIN) + { "" } else { "glib::" diff --git a/src/codegen/sys/ffi_type.rs b/src/codegen/sys/ffi_type.rs index 288340a8f..389d919cf 100644 --- a/src/codegen/sys/ffi_type.rs +++ b/src/codegen/sys/ffi_type.rs @@ -205,14 +205,12 @@ fn fix_name(env: &Env, type_id: library::TypeId, name: &str) -> Result { | Type::List(..) | Type::SList(..) | Type::HashTable(..) => { - if env.namespaces.glib_ns_id == namespaces::MAIN { + if env.namespaces.glib_ns_id == Some(namespaces::MAIN) { Ok(name.into()) + } else if let Some(glib_ns_id) = env.namespaces.glib_ns_id { + Ok(format!("{}::{}", &env.namespaces[glib_ns_id].crate_name, name).into()) } else { - Ok(format!( - "{}::{}", - &env.namespaces[env.namespaces.glib_ns_id].crate_name, name - ) - .into()) + Ok(name.into()) } } _ => Ok(name.into()), diff --git a/src/codegen/sys/lib_.rs b/src/codegen/sys/lib_.rs index c4aa2cb69..8d8de485f 100644 --- a/src/codegen/sys/lib_.rs +++ b/src/codegen/sys/lib_.rs @@ -33,7 +33,7 @@ fn generate_lib(w: &mut dyn Write, env: &Env) -> Result<()> { include_custom_modules(w, env)?; statics::after_extern_crates(w)?; - if env.config.library_name != "GLib" { + if env.config.library_name != "GLib" && env.namespaces.glib_ns_id.is_some() { statics::use_glib(w)?; } match &*env.config.library_name { diff --git a/src/custom_type_glib_priority.rs b/src/custom_type_glib_priority.rs index bc89481b0..ab451e726 100644 --- a/src/custom_type_glib_priority.rs +++ b/src/custom_type_glib_priority.rs @@ -12,10 +12,12 @@ impl Library { return; } + let Some(glib_ns_id) = self.find_namespace("GLib") else { + return; + }; + let tid_int = self.find_type(0, "*.gint").expect("No basic type *.gint"); - let glib_ns_id = self - .find_namespace("GLib") - .expect("Missing `GLib` namespace in add_glib_priority!"); + let tid_priority = self.add_type( glib_ns_id, "Priority",