You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: inflection.rs
    path of file: ./repos/Jotoba/lib/sentence_reader/src/sentence
    
    the code of the file until where you have to start completion: use super::FromMorphemes;
use crate::grammar::{rule::Rule, rule_set::RuleSet, Analyzer};
use crate::sentence::SentenceAnalyzer;
use igo_unidic::Morpheme;
use once_cell::sync::Lazy;
use types::jotoba::words::inflection::Inflection;

/*
#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord)]
pub enum Inflection {
    Negative,
    Polite,
    Present,
    Past,
    TeForm,
    Potential,
    Passive,
    Causative,
    CausativePassive,
    PotentialOrPassive,
    Imperative,
    Tai,
    TeIru,
    TeAru,
    TeMiru,
    TeShimau,
    Chau,
    TeOku,
    Toku,
    Tara,
    Tari,
}
*/

impl<'b> FromMorphemes<'static, 'b> for Inflection {
    /// Parses an inflection from given morpheme(s)
    fn from(parts: Vec<igo_unidic::Morpheme<'static, 'b>>, _pos: usize) -> Option<Self> {
        let lexemes = parts.iter().map(|i| i.lexeme).collect::<Vec<_>>();

        if lexemes.is_empty() {
            None
        } else if lexemes.len() == 1 {
            if parts[0].surface == "たら" {
                return Some(Self::Tara);
            }

            Some(match lexemes[0] {
                "ない" | "ぬ" => Inflection::Negative,
                "ます" => Inflection::Polite,
                "て" | "で" => Inflection::TeForm,
                "だ" | "た" => Inflection::Past,
                "れる" => Inflection::Passive,
                "せる" | "させる" => Inflection::Causative,
                "られる" => Inflection::PotentialOrPassive,
                "たい" => Inflection::Tai,
                "たり" | "だり" => Infl
    
    fn from(parts: Vec<igo_unidic::Morpheme<'static, 'b>>, _pos: usize) -> Option<Self> {
        let lexemes = parts.iter().map(|i| i.lexeme).collect::<Vec<_>>();

        if lexemes.is_empty() {
            None
        } else if lexemes.len() == 1 {
            if parts[0].surface == "たら" {
                return Some(Self::Tara);
            }

            Some(match lexemes[0] {
                "ない" | "ぬ" => Inflection::Negative,
                "ます" => Inflection::Polite,
                "て" | "で" => Inflection::TeForm,
                "だ" | "た" => Inflection::Past,
                "れる" => Inflection::Passive,
                "せる" | "させる" => Inflection::Causative,
                "られる" => Inflection::PotentialOrPassive,
                "たい" => Inflection::Tai,
                "たり" | "だり" => Inflection::Tari,
                "てる" | "でる" => Inflection::TeIru,
                "とく" | "どく" => Inflection::Toku,
                "ちゃう" | "じゃう" => Inflection::Chau,
                "ば" => Inflection::Ba,
                _ => return None,
            })
        } else {
            Some(match lexemes.as_slice() {
                &["て", "いる"] | &["で", "いる"] => Inflection::TeIru,
                &["て", "ある"] | &["で", "ある"] => Inflection::TeAru,
                &["て", "みる"] | &["で", "みる"] => Inflection::TeMiru,
                &["て", "しまう"] | &["で", "しまう"] => Inflection::TeShimau,
                &["て", "おく"] | &["で", "おく"] => Inflection::TeOku,
                &["さ", "せる"] => Inflection::Causative,
                // Fake する; The tokenizer tokenizes the さ of される as a form of する
                &["する", "れる"] => Inflection::CausativePassive,
                _ => return None,
            })
        }
    }