use super::super::Guid;
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
#[non_exhaustive]
pub enum RecipeKind {
BuildingBlock,
Roof,
Overgrowth,
Terrain,
Other,
}
impl RecipeKind {
pub(super) fn of(item: Guid) -> Option<Self> {
let host = crate::host()?;
let mut out = crate::abi::RecipeKind::OTHER;
(host.api().recipe_kind)(host.handle(), item.id(), &raw mut out)
.is_ok()
.then(|| out.into())
}
}
impl From<crate::abi::RecipeKind> for RecipeKind {
fn from(kind: crate::abi::RecipeKind) -> Self {
use crate::abi::RecipeKind as Abi;
match kind {
Abi::BUILDING_BLOCK => Self::BuildingBlock,
Abi::ROOF => Self::Roof,
Abi::OVERGROWTH => Self::Overgrowth,
Abi::TERRAIN => Self::Terrain,
_ => Self::Other,
}
}
}
impl From<RecipeKind> for crate::abi::RecipeKind {
fn from(kind: RecipeKind) -> Self {
match kind {
RecipeKind::BuildingBlock => Self::BUILDING_BLOCK,
RecipeKind::Roof => Self::ROOF,
RecipeKind::Overgrowth => Self::OVERGROWTH,
RecipeKind::Terrain => Self::TERRAIN,
RecipeKind::Other => Self::OTHER,
}
}
}