use serde::{Deserialize, Serialize};
use strum::{Display, EnumString};
#[derive(
Copy,
Clone,
Debug,
Hash,
Serialize,
Deserialize,
PartialEq,
Eq,
PartialOrd,
Ord,
EnumString,
Display,
)]
#[serde(rename_all = "snake_case")]
pub enum PackageType {
Lib,
Api,
}
impl TryFrom<i32> for PackageType {
type Error = &'static str;
fn try_from(value: i32) -> Result<Self, Self::Error> {
match value {
1 => Ok(PackageType::Lib),
2 => Ok(PackageType::Api),
_ => Err("Invalid value, check `PackageType` potential values"),
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn can_parse_package_type() {
let types = [PackageType::Lib, PackageType::Api];
for typ in &types {
let string = typ.to_string();
let parsed: PackageType = string.parse().unwrap();
assert_eq!(parsed, *typ);
}
}
}