meme-id 0.0.0

Map IDs to phrases and vice versa
Documentation
mod adjective;
mod adverb;
mod noun;
mod object_pronoun;
mod preposition;
mod verb_plural;
mod verb_singular;

pub enum Singular {}

pub enum Plural {}

pub trait Mapper {
    fn encode_word(bits: u128) -> (&'static str, u128);
    fn encode_words<const N: usize>(bits: u128) -> ([&'static str; N], u128);
    fn decode_word(word: &str, bits: u128) -> Option<u128>;
    fn decode_words<const N: usize>(words: [&str; N], bits: u128) -> Result<u128, usize>;
}

pub enum Adjective {}

impl Mapper for Adjective {
    fn encode_word(bits: u128) -> (&'static str, u128) {
        adjective::WORD_MAPPER.encode_word(bits)
    }
    fn encode_words<const N: usize>(bits: u128) -> ([&'static str; N], u128) {
        adjective::WORD_MAPPER.encode_words_norepeat(bits)
    }
    fn decode_word(word: &str, bits: u128) -> Option<u128> {
        adjective::WORD_MAPPER.decode_word(word, bits)
    }
    fn decode_words<const N: usize>(words: [&str; N], bits: u128) -> Result<u128, usize> {
        adjective::WORD_MAPPER.decode_words_norepeat(words, bits)
    }
}

pub enum Noun {}

impl Mapper for Noun {
    fn encode_word(bits: u128) -> (&'static str, u128) {
        noun::WORD_MAPPER.encode_word(bits)
    }
    fn encode_words<const N: usize>(bits: u128) -> ([&'static str; N], u128) {
        noun::WORD_MAPPER.encode_words_norepeat(bits)
    }
    fn decode_word(word: &str, bits: u128) -> Option<u128> {
        noun::WORD_MAPPER.decode_word(word, bits)
    }
    fn decode_words<const N: usize>(words: [&str; N], bits: u128) -> Result<u128, usize> {
        noun::WORD_MAPPER.decode_words_norepeat(words, bits)
    }
}

pub enum Verb<T> {
    _Unused(T),
}

impl Mapper for Verb<Singular> {
    fn encode_word(bits: u128) -> (&'static str, u128) {
        verb_singular::WORD_MAPPER.encode_word(bits)
    }
    fn encode_words<const N: usize>(bits: u128) -> ([&'static str; N], u128) {
        verb_singular::WORD_MAPPER.encode_words_norepeat(bits)
    }
    fn decode_word(word: &str, bits: u128) -> Option<u128> {
        verb_singular::WORD_MAPPER.decode_word(word, bits)
    }
    fn decode_words<const N: usize>(words: [&str; N], bits: u128) -> Result<u128, usize> {
        verb_singular::WORD_MAPPER.decode_words_norepeat(words, bits)
    }
}

impl Mapper for Verb<Plural> {
    fn encode_word(bits: u128) -> (&'static str, u128) {
        verb_plural::WORD_MAPPER.encode_word(bits)
    }
    fn encode_words<const N: usize>(bits: u128) -> ([&'static str; N], u128) {
        verb_plural::WORD_MAPPER.encode_words_norepeat(bits)
    }
    fn decode_word(word: &str, bits: u128) -> Option<u128> {
        verb_plural::WORD_MAPPER.decode_word(word, bits)
    }
    fn decode_words<const N: usize>(words: [&str; N], bits: u128) -> Result<u128, usize> {
        verb_plural::WORD_MAPPER.decode_words_norepeat(words, bits)
    }
}

pub enum Adverb {}

impl Mapper for Adverb {
    fn encode_word(bits: u128) -> (&'static str, u128) {
        adverb::WORD_MAPPER.encode_word(bits)
    }
    fn encode_words<const N: usize>(bits: u128) -> ([&'static str; N], u128) {
        adverb::WORD_MAPPER.encode_words_norepeat(bits)
    }
    fn decode_word(word: &str, bits: u128) -> Option<u128> {
        adverb::WORD_MAPPER.decode_word(word, bits)
    }
    fn decode_words<const N: usize>(words: [&str; N], bits: u128) -> Result<u128, usize> {
        adverb::WORD_MAPPER.decode_words_norepeat(words, bits)
    }
}

pub enum Preposition {}

impl Mapper for Preposition {
    fn encode_word(bits: u128) -> (&'static str, u128) {
        preposition::WORD_MAPPER.encode_word(bits)
    }
    fn encode_words<const N: usize>(bits: u128) -> ([&'static str; N], u128) {
        preposition::WORD_MAPPER.encode_words_norepeat(bits)
    }
    fn decode_word(word: &str, bits: u128) -> Option<u128> {
        preposition::WORD_MAPPER.decode_word(word, bits)
    }
    fn decode_words<const N: usize>(words: [&str; N], bits: u128) -> Result<u128, usize> {
        preposition::WORD_MAPPER.decode_words_norepeat(words, bits)
    }
}

pub enum ObjectPronoun {}

impl Mapper for ObjectPronoun {
    fn encode_word(bits: u128) -> (&'static str, u128) {
        object_pronoun::WORD_MAPPER.encode_word(bits)
    }
    fn encode_words<const N: usize>(bits: u128) -> ([&'static str; N], u128) {
        object_pronoun::WORD_MAPPER.encode_words(bits)
    }
    fn decode_word(word: &str, bits: u128) -> Option<u128> {
        object_pronoun::WORD_MAPPER.decode_word(word, bits)
    }
    fn decode_words<const N: usize>(words: [&str; N], bits: u128) -> Result<u128, usize> {
        object_pronoun::WORD_MAPPER.decode_words(words, bits)
    }
}