    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28

    use serde::{Deserialize, Serialize};

    bitflags::bitflags! {
        #[derive(Serialize, Deserialize)]
        pub struct Extensions: usize {
            const UNWRAP_NEWTYPES = 0x1;
            const IMPLICIT_SOME = 0x2;
            const UNWRAP_VARIANT_NEWTYPES = 0x4;
        }
    }

    impl Extensions {
        /// Creates an extension flag from an ident.
        pub fn from_ident(ident: &[u8]) -> Option<Extensions> {
            match ident {
                b"unwrap_newtypes" => Some(Extensions::UNWRAP_NEWTYPES),
                b"implicit_some" => Some(Extensions::IMPLICIT_SOME),
                b"unwrap_variant_newtypes" => Some(Extensions::UNWRAP_VARIANT_NEWTYPES),
                _ => None,
            }
        }
    }

    impl Default for Extensions {
        fn default() -> Self {
            Extensions::empty()
        }
    }