in src/bindgen/ir/ty.rs [523:569]
fn simplified_type(&self, config: &Config) -> Option<Self> {
let path = match *self {
Type::Path(ref p) => p,
_ => return None,
};
if path.generics().is_empty() {
return None;
}
if path.generics().len() != 1 {
return None;
}
let unsimplified_generic = match path.generics()[0] {
GenericArgument::Type(ref ty) => ty,
GenericArgument::Const(_) => return None,
};
let generic = match unsimplified_generic.simplified_type(config) {
Some(generic) => Cow::Owned(generic),
None => Cow::Borrowed(unsimplified_generic),
};
match path.name() {
"Option" => generic
.make_nullable()
.or_else(|| generic.make_zeroable(true)),
"NonNull" => Some(Type::Ptr {
ty: Box::new(generic.into_owned()),
is_const: false,
is_nullable: false,
is_ref: false,
}),
"NonZero" => generic.make_zeroable(false),
"Box" if config.language != Language::Cxx => Some(Type::Ptr {
ty: Box::new(generic.into_owned()),
is_const: false,
is_nullable: false,
is_ref: false,
}),
"SyncUnsafeCell" | "UnsafeCell" | "Cell" => Some(generic.into_owned()),
"ManuallyDrop" | "MaybeUninit" | "Pin" if config.language != Language::Cxx => {
Some(generic.into_owned())
}
_ => None,
}
}