true
}
+pub fn string_path_to_syn_path(path: &str) -> syn::Path {
+ let mut segments = syn::punctuated::Punctuated::new();
+ for seg in path.split("::") {
+ segments.push(syn::PathSegment {
+ ident: syn::Ident::new(seg, Span::call_site()),
+ arguments: syn::PathArguments::None,
+ });
+ }
+ syn::Path { leading_colon: Some(syn::Token![::](Span::call_site())), segments }
+}
+
#[derive(Debug, PartialEq)]
pub enum ExportStatus {
Export,
}
pub struct ImportResolver<'mod_lifetime, 'crate_lft: 'mod_lifetime> {
- crate_name: &'mod_lifetime str,
+ pub crate_name: &'mod_lifetime str,
dependencies: &'mod_lifetime HashSet<syn::Ident>,
module_path: &'mod_lifetime str,
imports: HashMap<syn::Ident, (String, syn::Path)>,
Self { crate_name, dependencies, module_path, imports, declared, priv_modules }
}
- pub fn get_declared_type(&self, ident: &syn::Ident) -> Option<&DeclType<'crate_lft>> {
- self.declared.get(ident)
- }
-
pub fn maybe_resolve_declared(&self, id: &syn::Ident) -> Option<&DeclType<'crate_lft>> {
self.declared.get(id)
}
} else { None }
}
- pub fn maybe_resolve_non_ignored_ident(&self, id: &syn::Ident) -> Option<String> {
- if let Some((imp, _)) = self.imports.get(id) {
- Some(imp.clone())
- } else if let Some(decl_type) = self.declared.get(id) {
- match decl_type {
- DeclType::StructIgnored => None,
- _ => Some(self.module_path.to_string() + "::" + &format!("{}", id)),
- }
- } else { None }
- }
-
pub fn maybe_resolve_path(&self, p: &syn::Path, generics: Option<&GenericTypes>) -> Option<String> {
if let Some(gen_types) = generics {
if let Some(resp) = gen_types.maybe_resolve_path(p) {
/// Aliases from paths to some other Type
pub type_aliases: HashMap<String, syn::Type>,
/// Value is an alias to Key (maybe with some generics)
- pub reverse_alias_map: HashMap<String, Vec<(syn::Path, syn::PathArguments)>>,
+ pub reverse_alias_map: HashMap<String, Vec<(String, syn::PathArguments)>>,
/// Template continer types defined, map from mangled type name -> whether a destructor fn
/// exists.
///
pub struct TypeResolver<'mod_lifetime, 'crate_lft: 'mod_lifetime> {
pub module_path: &'mod_lifetime str,
pub crate_types: &'mod_lifetime CrateTypes<'crate_lft>,
- types: ImportResolver<'mod_lifetime, 'crate_lft>,
+ pub types: ImportResolver<'mod_lifetime, 'crate_lft>,
}
/// Returned by write_empty_rust_val_check_suffix to indicate what type of dereferencing needs to
// *** Type definition during main.rs processing ***
// *************************************************
- pub fn get_declared_type(&'a self, ident: &syn::Ident) -> Option<&'a DeclType<'c>> {
- self.types.get_declared_type(ident)
- }
/// Returns true if the object at the given path is mapped as X { inner: *mut origX, .. }.
pub fn c_type_has_inner_from_path(&self, full_path: &str) -> bool {
self.crate_types.opaques.get(full_path).is_some()
self.types.maybe_resolve_ident(id)
}
- pub fn maybe_resolve_non_ignored_ident(&self, id: &syn::Ident) -> Option<String> {
- self.types.maybe_resolve_non_ignored_ident(id)
- }
-
pub fn maybe_resolve_path(&self, p_arg: &syn::Path, generics: Option<&GenericTypes>) -> Option<String> {
self.types.maybe_resolve_path(p_arg, generics)
}
assert!(self.write_c_type_intern(w, t, generics, false, false, ptr_for_ref, true, false));
}
pub fn understood_c_path(&self, p: &syn::Path) -> bool {
- if p.leading_colon.is_some() { return false; }
self.write_c_path_intern(&mut std::io::sink(), p, None, false, false, false, false, true)
}
pub fn understood_c_type(&self, t: &syn::Type, generics: Option<&GenericTypes>) -> bool {