flatarray 1.1.0

Implementation of a flattened iterator, that acts as if it still was an iterator of iterator
Documentation
use crate::builder::FlatBuilder;
use crate::iterator::{Iter, StrIter};
use crate::vector::FlatVec;
use std::ops::Deref;

pub type FlatStr = FlatVec<u8>;

impl FlatStr {
    pub fn from_strings<S: Deref<Target = str>, I: IntoIterator<Item = S>>(
        strings_iter: I,
    ) -> Self {
        let mut builder = FlatBuilder::default();
        strings_iter.into_iter().for_each(|s| {
            let bytes_slice = s.bytes();
            builder.push(bytes_slice);
        });
        builder.build_flatvec()
    }
}

impl FlatStr {
    pub fn iter_strings<'a>(&'a self) -> StrIter<'a> {
        StrIter(Iter::new(self))
    }
}

#[cfg(test)]
mod test {
    use super::*;

    fn setup_flattened_str() -> (FlatStr, Vec<String>) {
        let input = vec![
            String::from("this is the first sentence"),
            String::from("this is the second sentence"),
            String::from("this is the third sentence"),
        ];
        let flat_str = FlatStr::from_strings(input.clone());
        (flat_str, input)
    }

    #[test]
    fn test_flatvec_len() {
        let (flat_str, expected) = setup_flattened_str();
        let vectored: Vec<_> = Iter::new(&flat_str).collect();
        assert!(expected.len() == vectored.len())
    }
}