irust_repl 0.25.1

IRust Repl abstraction
Documentation
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
use std::str::FromStr;

#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[derive(Debug, Clone, Copy, Default)]
pub enum Edition {
    E2015,
    E2018,
    E2021,
    #[default]
    E2024,
}

impl FromStr for Edition {
    type Err = Box<dyn std::error::Error>;
    fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
        match s.to_lowercase().as_str() {
            "2015" => Ok(Edition::E2015),
            "2018" => Ok(Edition::E2018),
            "2021" => Ok(Edition::E2021),
            "2024" => Ok(Edition::E2024),
            _ => Err("Unknown edition".into()),
        }
    }
}
impl std::fmt::Display for Edition {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        match self {
            Edition::E2015 => write!(f, "2015"),
            Edition::E2018 => write!(f, "2018"),
            Edition::E2021 => write!(f, "2021"),
            Edition::E2024 => write!(f, "2024"),
        }
    }
}