tongrams 0.1.4

Tons of N-grams
Documentation
use std::fs::File;
use std::io::BufReader;
use std::path::{Path, PathBuf};

use anyhow::Result;
use flate2::read::{DeflateDecoder, GzDecoder, ZlibDecoder};

use crate::loader::GramsLoader;
use crate::parser::GramsParser;

pub struct GramsGzFileLoader {
    filepath: PathBuf,
}

impl GramsGzFileLoader {
    pub fn new<P>(filepath: P) -> Self
    where
        P: AsRef<Path>,
    {
        Self {
            filepath: PathBuf::from(filepath.as_ref()),
        }
    }
}

impl GramsLoader<GzDecoder<File>> for GramsGzFileLoader {
    fn parser(&self) -> Result<GramsParser<GzDecoder<File>>> {
        let reader = GzDecoder::new(File::open(&self.filepath)?);
        GramsParser::new(BufReader::new(reader))
    }
}

pub struct GramsDeflateFileLoader {
    filepath: PathBuf,
}

impl GramsDeflateFileLoader {
    pub fn new<P>(filepath: P) -> Self
    where
        P: AsRef<Path>,
    {
        Self {
            filepath: PathBuf::from(filepath.as_ref()),
        }
    }
}

impl GramsLoader<DeflateDecoder<File>> for GramsDeflateFileLoader {
    fn parser(&self) -> Result<GramsParser<DeflateDecoder<File>>> {
        let reader = DeflateDecoder::new(File::open(&self.filepath)?);
        GramsParser::new(BufReader::new(reader))
    }
}

pub struct GramsZlibFileLoader {
    filepath: PathBuf,
}

impl GramsZlibFileLoader {
    pub fn new<P>(filepath: P) -> Self
    where
        P: AsRef<Path>,
    {
        Self {
            filepath: PathBuf::from(filepath.as_ref()),
        }
    }
}

impl GramsLoader<ZlibDecoder<File>> for GramsZlibFileLoader {
    fn parser(&self) -> Result<GramsParser<ZlibDecoder<File>>> {
        let reader = ZlibDecoder::new(File::open(&self.filepath)?);
        GramsParser::new(BufReader::new(reader))
    }
}