mockiato-codegen 0.9.6

Internally used by mockiato for code generation. This crate should never be used directly
Documentation
use syn::{Ident, Path};

pub(crate) trait PathExt {
    fn first_segment_as_ident(&self) -> Option<&Ident>;
}

impl PathExt for Path {
    fn first_segment_as_ident(&self) -> Option<&Ident> {
        Some(&self.segments.iter().nth(0)?.ident)
    }
}

#[cfg(test)]
mod tests {
    use super::*;
    use syn::punctuated::Punctuated;
    use syn::{parse_quote, Ident, Path};

    #[test]
    fn returns_none_if_path_is_empty() {
        let path = Path {
            leading_colon: None,
            segments: Punctuated::new(),
        };

        assert!(path.first_segment_as_ident().is_none());
    }

    #[test]
    fn returns_first_segment_without_params() {
        let path: Path = parse_quote!(Foo<'a>::Bar::Baz);
        let expected_ident: Ident = parse_quote!(Foo);

        assert_eq!(&expected_ident, path.first_segment_as_ident().unwrap());
    }
}