quickscript 0.5.5

A quick programming language with a compiler implemented in Rust.
Documentation
use anyhow::Result;

use crate::tokenizer::consumer::Cursor;

use super::operator::Operator;

#[derive(Debug, Clone, Eq, PartialEq, Ord, PartialOrd)]
pub enum TokenType {
    Name(Vec<char>),
    String(Vec<char>),
    Number(Vec<u8>),
    Operator(Operator),
    None,
}

impl TokenType {
    pub fn read_operator(buf: &mut Cursor<char>) -> TokenType {
        TokenType::Operator(Operator::from(buf.next().unwrap()))
    }

    pub fn get_name(&self) -> Result<String> {
        match self.clone() {
            Self::Name(val) => Ok(String::from_iter(val)),
            _ => Err(anyhow!("TokenType is not TokenType::Name!")),
        }
    }

    pub fn get_string(&self) -> Result<String> {
        match self.clone() {
            Self::String(val) => Ok(String::from_iter(val)),
            _ => Err(anyhow!("TokenType is not TokenType::String!")),
        }
    }

    pub fn get_number(&self) -> Result<i32> {
        match self.clone() {
            Self::Number(val) => Ok(String::from_iter(
                val.iter().map(|v| v.to_string()).collect::<Vec<String>>(),
            )
            .parse()?),
            _ => Err(anyhow!("TokenType is not TokenType::Number!")),
        }
    }

    pub fn get_operator(&self) -> Result<Operator> {
        match self.clone() {
            Self::Operator(op) => Ok(op),
            _ => Err(anyhow!("TokenType is not TokenType::Operator!")),
        }
    }

    pub fn is_number(&self) -> bool {
        match self.clone() {
            Self::Number(_) => true,
            _ => false,
        }
    }

    pub fn is_name(&self) -> bool {
        match self.clone() {
            Self::Name(_) => true,
            _ => false,
        }
    }
}