fn simplified_type()

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,
        }
    }