addonscript-rs/crates/model/src/enums.rs

65 lines
1.4 KiB
Rust

use serde::{Deserialize, Serialize};
use serde_enum_str::{Deserialize_enum_str, Serialize_enum_str};
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Hash)]
#[serde(rename_all = "lowercase")]
pub enum Flag {
Required,
Optional,
Included,
Incompatible,
Launch,
Env,
Expected,
Patch,
}
#[derive(Debug, Deserialize_enum_str, Serialize_enum_str, PartialEq, Eq, Hash)]
#[serde(rename_all = "lowercase")]
pub enum InstallAction {
Move,
Extract,
Rename,
Inject,
Library,
#[serde(other)]
Unknown(String),
}
#[derive(Debug, Deserialize_enum_str, Serialize_enum_str, PartialEq, Eq, Hash)]
#[serde(rename_all = "lowercase")]
pub enum APIFeature {
Addons,
Files,
Env,
#[serde(other)]
Unofficial(String),
}
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Hash, Default)]
#[serde(rename_all = "lowercase")]
pub enum Side {
Client,
Server,
#[default]
Both,
}
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Hash)]
#[serde(rename_all = "lowercase")]
pub enum ArgumentMode {
Replace,
Append,
Expand,
Override,
}
impl Side {
pub fn compatbile_with(&self, other: &Self) -> bool {
match self {
Side::Client => other == &Self::Client || other == &Self::Both,
Side::Server => other == &Self::Server || other == &Self::Both,
Side::Both => true,
}
}
}