use std::cmp::PartialEq;
use std::fmt::{Display, Formatter};
use std::str::FromStr;
use serde::{Deserialize, Serialize};
use serde_repr::{Deserialize_repr, Serialize_repr};
use super::InvalidValueError;
#[cfg(doc)]
use super::FedoraRelease;
#[allow(missing_docs)]
#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub enum ComposeRequest {
#[serde(rename = "stable")]
Stable,
#[serde(rename = "testing")]
Testing,
}
impl Display for ComposeRequest {
fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
let value = match self {
ComposeRequest::Stable => "stable",
ComposeRequest::Testing => "testing",
};
write!(f, "{value}")
}
}
impl TryFrom<&str> for ComposeRequest {
type Error = InvalidValueError;
fn try_from(value: &str) -> Result<Self, Self::Error> {
match value.to_lowercase().as_str() {
"stable" => Ok(ComposeRequest::Stable),
"testing" => Ok(ComposeRequest::Testing),
_ => Err(InvalidValueError::new("ComposeRequest", value.to_owned())),
}
}
}
impl FromStr for ComposeRequest {
type Err = InvalidValueError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
TryFrom::try_from(s)
}
}
#[allow(missing_docs)]
#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub enum ComposeState {
#[serde(rename = "cleaning")]
Cleaning,
#[serde(rename = "failed")]
Failed,
#[serde(rename = "initializing")]
Initializing,
#[serde(rename = "notifying")]
Notifying,
#[serde(rename = "pending")]
Pending,
#[serde(rename = "punging")]
Punging,
#[serde(rename = "requested")]
Requested,
#[serde(rename = "signing_repo")]
SigningRepo,
#[serde(rename = "success")]
Success,
#[serde(rename = "syncing_repo")]
SyncingRepo,
#[serde(rename = "updateinfo")]
UpdateInfo,
}
impl Display for ComposeState {
fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
let value = match self {
ComposeState::Cleaning => "cleaning",
ComposeState::Failed => "failed",
ComposeState::Initializing => "initializing",
ComposeState::Notifying => "notifying",
ComposeState::Pending => "pending",
ComposeState::Punging => "punging",
ComposeState::Requested => "requested",
ComposeState::SigningRepo => "signing_repo",
ComposeState::Success => "success",
ComposeState::SyncingRepo => "syncing_repo",
ComposeState::UpdateInfo => "updateinfo",
};
write!(f, "{value}")
}
}
impl TryFrom<&str> for ComposeState {
type Error = InvalidValueError;
fn try_from(value: &str) -> Result<Self, Self::Error> {
match value.to_lowercase().as_str() {
"cleaning" => Ok(ComposeState::Cleaning),
"failed" => Ok(ComposeState::Failed),
"initializing" => Ok(ComposeState::Initializing),
"notifying" => Ok(ComposeState::Notifying),
"pending" => Ok(ComposeState::Pending),
"punging" => Ok(ComposeState::Punging),
"requested" => Ok(ComposeState::Requested),
"signing_repo" => Ok(ComposeState::SigningRepo),
"success" => Ok(ComposeState::Success),
"syncing_repo" => Ok(ComposeState::SyncingRepo),
"updateinfo" => Ok(ComposeState::UpdateInfo),
_ => Err(InvalidValueError::new("ComposeStatus", value.to_owned())),
}
}
}
impl FromStr for ComposeState {
type Err = InvalidValueError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
TryFrom::try_from(s)
}
}
#[allow(missing_docs)]
#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub enum ContentType {
#[serde(rename = "container")]
Container,
#[serde(rename = "flatpak")]
Flatpak,
#[serde(rename = "module")]
Module,
#[serde(rename = "rpm")]
RPM,
}
impl ContentType {
pub const fn suffix(&self) -> &str {
use ContentType::*;
match self {
RPM => "",
Container => "C",
Flatpak => "F",
Module => "M",
}
}
pub fn try_from_suffix(suffix: &str) -> Result<Self, InvalidValueError> {
match suffix {
"" => Ok(ContentType::RPM),
"C" => Ok(ContentType::Container),
"F" => Ok(ContentType::Flatpak),
"M" => Ok(ContentType::Module),
_ => Err(InvalidValueError::new(
"ContentType",
format!("Suffix '{suffix}' is not valid."),
)),
}
}
}
impl Display for ContentType {
fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
let value = match self {
ContentType::Container => "container",
ContentType::Flatpak => "flatpak",
ContentType::Module => "module",
ContentType::RPM => "rpm",
};
write!(f, "{value}")
}
}
impl TryFrom<&str> for ContentType {
type Error = InvalidValueError;
fn try_from(value: &str) -> Result<Self, Self::Error> {
match value.to_lowercase().as_str() {
"container" => Ok(ContentType::Container),
"flatpak" => Ok(ContentType::Flatpak),
"module" => Ok(ContentType::Module),
"rpm" => Ok(ContentType::RPM),
_ => Err(InvalidValueError::new("ContentType", value.to_owned())),
}
}
}
impl FromStr for ContentType {
type Err = InvalidValueError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
TryFrom::try_from(s)
}
}
#[derive(Clone, Copy, Debug, Default, Deserialize_repr, Eq, PartialEq, Serialize_repr)]
#[repr(i8)]
pub enum Karma {
Positive = 1,
#[default]
Neutral = 0,
Negative = -1,
}
impl Display for Karma {
fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
write!(
f,
"{}",
match self {
Karma::Positive => String::from("+1"),
Karma::Neutral => String::from("±0"),
Karma::Negative => String::from("-1"),
}
)
}
}
impl TryFrom<&str> for Karma {
type Error = InvalidValueError;
fn try_from(value: &str) -> Result<Self, Self::Error> {
match value.to_lowercase().as_str() {
"+1" | "1" => Ok(Karma::Positive),
"0" | "±0" => Ok(Karma::Neutral),
"-1" => Ok(Karma::Negative),
_ => Err(InvalidValueError::new("Karma", value.to_owned())),
}
}
}
impl FromStr for Karma {
type Err = InvalidValueError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
TryFrom::try_from(s)
}
}
#[allow(missing_docs)]
#[derive(Debug, Deserialize, Eq, PartialEq, Serialize)]
pub enum PackageManager {
#[serde(rename = "dnf")]
DNF,
#[serde(rename = "unspecified")]
Unspecified,
#[serde(rename = "yum")]
YUM,
}
impl Display for PackageManager {
fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
let value = match self {
PackageManager::DNF => "dnf",
PackageManager::Unspecified => "unspecified",
PackageManager::YUM => "yum",
};
write!(f, "{value}")
}
}
impl TryFrom<&str> for PackageManager {
type Error = InvalidValueError;
fn try_from(value: &str) -> Result<Self, Self::Error> {
match value.to_lowercase().as_str() {
"dnf" => Ok(PackageManager::DNF),
"yum" => Ok(PackageManager::YUM),
_ => Err(InvalidValueError::new("PackageManager", value.to_owned())),
}
}
}
impl FromStr for PackageManager {
type Err = InvalidValueError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
TryFrom::try_from(s)
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Deserialize, Serialize)]
pub enum ReleaseState {
#[serde(rename = "archived")]
Archived,
#[serde(rename = "current")]
Current,
#[serde(rename = "disabled")]
Disabled,
#[serde(rename = "frozen")]
Frozen,
#[serde(rename = "pending")]
Pending,
}
impl Display for ReleaseState {
fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
let value = match self {
ReleaseState::Archived => "archived",
ReleaseState::Current => "current",
ReleaseState::Disabled => "disabled",
ReleaseState::Frozen => "frozen",
ReleaseState::Pending => "pending",
};
write!(f, "{value}")
}
}
impl TryFrom<&str> for ReleaseState {
type Error = InvalidValueError;
fn try_from(value: &str) -> Result<Self, Self::Error> {
match value.to_lowercase().as_str() {
"archived" => Ok(ReleaseState::Archived),
"current" => Ok(ReleaseState::Current),
"disabled" => Ok(ReleaseState::Disabled),
"frozen" => Ok(ReleaseState::Frozen),
"pending" => Ok(ReleaseState::Pending),
_ => Err(InvalidValueError::new("ReleaseState", value.to_owned())),
}
}
}
impl FromStr for ReleaseState {
type Err = InvalidValueError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
TryFrom::try_from(s)
}
}
#[allow(missing_docs)]
#[derive(Clone, Copy, Debug, Eq, PartialEq, Deserialize, Serialize)]
pub enum TestGatingStatus {
#[serde(rename = "failed")]
Failed,
#[serde(rename = "greenwave_failed")]
GreenwaveFailed,
#[serde(rename = "ignored")]
Ignored,
#[serde(rename = "passed")]
Passed,
#[serde(rename = "queued")]
Queued,
#[serde(rename = "running")]
Running,
#[serde(rename = "waiting")]
Waiting,
}
impl Display for TestGatingStatus {
fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
let value = match self {
TestGatingStatus::Failed => "failed",
TestGatingStatus::GreenwaveFailed => "greenwave_failed",
TestGatingStatus::Ignored => "ignored",
TestGatingStatus::Passed => "passed",
TestGatingStatus::Queued => "queued",
TestGatingStatus::Running => "running",
TestGatingStatus::Waiting => "waiting",
};
write!(f, "{value}")
}
}
impl TryFrom<&str> for TestGatingStatus {
type Error = InvalidValueError;
fn try_from(value: &str) -> Result<Self, Self::Error> {
match value.to_lowercase().as_str() {
"failed" => Ok(TestGatingStatus::Failed),
"greenwave_failed" => Ok(TestGatingStatus::GreenwaveFailed),
"ignored" => Ok(TestGatingStatus::Ignored),
"passed" => Ok(TestGatingStatus::Passed),
"queued" => Ok(TestGatingStatus::Queued),
"running" => Ok(TestGatingStatus::Running),
"waiting" => Ok(TestGatingStatus::Waiting),
_ => Err(InvalidValueError::new("TestGatingStatus", value.to_owned())),
}
}
}
impl FromStr for TestGatingStatus {
type Err = InvalidValueError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
TryFrom::try_from(s)
}
}
#[derive(Debug, Deserialize, Serialize)]
#[serde(untagged)]
pub(crate) enum UpdateID {
ID(u32),
Alias(String),
}
impl Display for UpdateID {
fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
let value = match self {
UpdateID::ID(number) => number.to_string(),
UpdateID::Alias(string) => string.to_owned(),
};
write!(f, "{value}")
}
}
#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub enum UpdateRequest {
#[serde(rename = "obsolete")]
Obsolete,
#[serde(rename = "revoke")]
Revoke,
#[serde(rename = "stable")]
Stable,
#[serde(rename = "testing")]
Testing,
#[serde(rename = "unpush")]
Unpush,
}
impl Display for UpdateRequest {
fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
let value = match self {
UpdateRequest::Obsolete => "obsolete",
UpdateRequest::Revoke => "revoke",
UpdateRequest::Stable => "stable",
UpdateRequest::Testing => "testing",
UpdateRequest::Unpush => "unpush",
};
write!(f, "{value}")
}
}
impl TryFrom<&str> for UpdateRequest {
type Error = InvalidValueError;
fn try_from(value: &str) -> Result<Self, Self::Error> {
match value.to_lowercase().as_str() {
"obsolete" => Ok(UpdateRequest::Obsolete),
"revoke" => Ok(UpdateRequest::Revoke),
"stable" => Ok(UpdateRequest::Stable),
"testing" => Ok(UpdateRequest::Testing),
"unpush" => Ok(UpdateRequest::Unpush),
_ => Err(InvalidValueError::new("UpdateRequest", value.to_owned())),
}
}
}
impl FromStr for UpdateRequest {
type Err = InvalidValueError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
TryFrom::try_from(s)
}
}
#[allow(missing_docs)]
#[derive(Clone, Copy, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
pub enum UpdateSeverity {
#[serde(rename = "high")]
High,
#[serde(rename = "low")]
Low,
#[serde(rename = "medium")]
Medium,
#[default]
#[serde(rename = "unspecified")]
Unspecified,
#[serde(rename = "urgent")]
Urgent,
}
impl Display for UpdateSeverity {
fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
let value = match self {
UpdateSeverity::High => "high",
UpdateSeverity::Low => "low",
UpdateSeverity::Medium => "medium",
UpdateSeverity::Unspecified => "unspecified",
UpdateSeverity::Urgent => "urgent",
};
write!(f, "{value}")
}
}
impl TryFrom<&str> for UpdateSeverity {
type Error = InvalidValueError;
fn try_from(value: &str) -> Result<Self, Self::Error> {
match value.to_lowercase().as_str() {
"high" => Ok(UpdateSeverity::High),
"low" => Ok(UpdateSeverity::Low),
"medium" => Ok(UpdateSeverity::Medium),
"unspecified" => Ok(UpdateSeverity::Unspecified),
"urgent" => Ok(UpdateSeverity::Urgent),
_ => Err(InvalidValueError::new("UpdateSeverity", value.to_owned())),
}
}
}
impl FromStr for UpdateSeverity {
type Err = InvalidValueError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
TryFrom::try_from(s)
}
}
#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub enum UpdateStatus {
#[serde(rename = "obsolete")]
Obsolete,
#[serde(rename = "pending")]
Pending,
#[serde(rename = "side_tag_active")]
SideTagActive,
#[serde(rename = "side_tag_expired")]
SideTagExpired,
#[serde(rename = "stable")]
Stable,
#[serde(rename = "testing")]
Testing,
#[serde(rename = "unpushed")]
Unpushed,
}
impl Display for UpdateStatus {
fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
let value = match self {
UpdateStatus::Obsolete => "obsolete",
UpdateStatus::Pending => "pending",
UpdateStatus::SideTagActive => "side_tag_active",
UpdateStatus::SideTagExpired => "side_tag_expired",
UpdateStatus::Stable => "stable",
UpdateStatus::Testing => "testing",
UpdateStatus::Unpushed => "unpushed",
};
write!(f, "{value}")
}
}
impl TryFrom<&str> for UpdateStatus {
type Error = InvalidValueError;
fn try_from(value: &str) -> Result<Self, Self::Error> {
match value.to_lowercase().as_str() {
"obsolete" => Ok(UpdateStatus::Obsolete),
"pending" => Ok(UpdateStatus::Pending),
"side_tag_active" => Ok(UpdateStatus::SideTagActive),
"side_tag_expired" => Ok(UpdateStatus::SideTagExpired),
"stable" => Ok(UpdateStatus::Stable),
"testing" => Ok(UpdateStatus::Testing),
"unpushed" => Ok(UpdateStatus::Unpushed),
_ => Err(InvalidValueError::new("UpdateStatus", value.to_owned())),
}
}
}
impl FromStr for UpdateStatus {
type Err = InvalidValueError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
TryFrom::try_from(s)
}
}
#[derive(Clone, Copy, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
pub enum UpdateSuggestion {
#[serde(rename = "logout")]
Logout,
#[serde(rename = "reboot")]
Reboot,
#[default]
#[serde(rename = "unspecified")]
Unspecified,
}
impl Display for UpdateSuggestion {
fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
let value = match self {
UpdateSuggestion::Logout => "logout",
UpdateSuggestion::Reboot => "reboot",
UpdateSuggestion::Unspecified => "unspecified",
};
write!(f, "{value}")
}
}
impl TryFrom<&str> for UpdateSuggestion {
type Error = InvalidValueError;
fn try_from(value: &str) -> Result<Self, Self::Error> {
match value.to_lowercase().as_str() {
"logout" => Ok(UpdateSuggestion::Logout),
"reboot" => Ok(UpdateSuggestion::Reboot),
"unspecified" => Ok(UpdateSuggestion::Unspecified),
_ => Err(InvalidValueError::new("UpdateSuggestion", value.to_owned())),
}
}
}
impl FromStr for UpdateSuggestion {
type Err = InvalidValueError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
TryFrom::try_from(s)
}
}
#[derive(Clone, Copy, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
pub enum UpdateType {
#[serde(rename = "bugfix")]
BugFix,
#[serde(rename = "enhancement")]
Enhancement,
#[serde(rename = "newpackage")]
NewPackage,
#[serde(rename = "security")]
Security,
#[default]
#[serde(rename = "unspecified")]
Unspecified,
}
impl Display for UpdateType {
fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
let value = match self {
UpdateType::BugFix => "bugfix",
UpdateType::Enhancement => "enhancement",
UpdateType::NewPackage => "newpackage",
UpdateType::Security => "security",
UpdateType::Unspecified => "unspecified",
};
write!(f, "{value}")
}
}
impl TryFrom<&str> for UpdateType {
type Error = InvalidValueError;
fn try_from(value: &str) -> Result<Self, Self::Error> {
match value.to_lowercase().as_str() {
"bugfix" => Ok(UpdateType::BugFix),
"enhancement" => Ok(UpdateType::Enhancement),
"newpackage" => Ok(UpdateType::NewPackage),
"security" => Ok(UpdateType::Security),
"unspecified" => Ok(UpdateType::Unspecified),
_ => Err(InvalidValueError::new("UpdateType", value.to_owned())),
}
}
}
impl FromStr for UpdateType {
type Err = InvalidValueError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
TryFrom::try_from(s)
}
}