use std::str::FromStr;
use serde::{Deserialize, Serialize};
#[derive(PartialEq, Eq, Debug, Serialize, Deserialize)]
pub enum GenerationStatus {
#[serde(rename = "empty")]
Empty,
#[serde(rename = "structure_starts")]
StructureStarts,
#[serde(rename = "structure_references")]
StructureReferences,
#[serde(rename = "biomes")]
Biomes,
#[serde(rename = "noise")]
Noise,
#[serde(rename = "surface")]
Surface,
#[serde(rename = "cavers")]
Carvers,
#[serde(rename = "liquid_cavers")]
LiquidCarvers,
#[serde(rename = "features")]
Features,
#[serde(rename = "light")]
Light,
#[serde(rename = "spawn")]
Spawn,
#[serde(rename = "heightmaps")]
Heightmaps,
#[serde(rename = "minecraft:full")]
Full,
}
impl ToString for GenerationStatus {
fn to_string(&self) -> String {
match self {
Self::Full => String::from("minecraft:full"),
Self::Empty => String::from("empty"),
Self::StructureStarts => String::from("structure_starts"),
Self::StructureReferences => String::from("structure_references"),
Self::Biomes => String::from("biomes"),
Self::Noise => String::from("noise"),
Self::Surface => String::from("surface"),
Self::Carvers => String::from("carvers"),
Self::LiquidCarvers => String::from("liquid_carvers"),
Self::Features => String::from("features"),
Self::Light => String::from("light"),
Self::Spawn => String::from("spawn"),
Self::Heightmaps => String::from("heightmaps"),
}
}
}
impl FromStr for GenerationStatus {
type Err = ();
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"minecraft:full" => Ok(Self::Full),
"empty" => Ok(Self::Empty),
"structure_starts" => Ok(Self::StructureStarts),
"structure_references" => Ok(Self::StructureReferences),
"biomes" => Ok(Self::Biomes),
"noise" => Ok(Self::Noise),
"surface" => Ok(Self::Surface),
"carvers" => Ok(Self::Carvers),
"liquid_carvers" => Ok(Self::LiquidCarvers),
"features" => Ok(Self::Features),
"light" => Ok(Self::Light),
"spawn" => Ok(Self::Spawn),
"heightmaps" => Ok(Self::Heightmaps),
_ => {
if s.len() > 10 && &s[..10] == "minecraft:" {
Self::from_str(&s[10..])
} else {
Err(())
}
}
}
}
}