platform-path 0.1.0

CLI for identifying the platform path
Documentation
use strum::{Display, EnumIter, EnumString, EnumVariantNames};

#[derive(Debug, PartialEq, Eq, Hash, Display, EnumString, EnumIter, EnumVariantNames)]
#[strum(serialize_all = "lowercase")]
#[cfg_attr(
  feature = "serde1",
  derive(serde::Serialize, serde::Deserialize),
  serde(rename_all = "lowercase")
)]
pub(crate) enum Status {
  Supported,
  Unsupported,
  Unknown,
}

#[derive(Debug)]
#[cfg_attr(feature = "serde1", derive(serde::Serialize, serde::Deserialize))]
pub(crate) struct StructuredStatus {
  pub(crate) status: Status,
}

impl From<Status> for StructuredStatus {
  fn from(status: Status) -> Self {
    Self { status }
  }
}

impl Default for Status {
  fn default() -> Self {
    Self::Unknown
  }
}

impl From<Option<&str>> for Status {
  fn from(status: Option<&str>) -> Self {
    match status {
      None => Status::Unknown,
      Some(status) => match status.parse() {
        Err(_) => Status::Unknown,
        Ok(status) => status,
      },
    }
  }
}