atspi_common/
operation.rs

1use crate::AtspiError;
2use std::{fmt, str::FromStr};
3
4/// An operation can either be [`Self::Insert`] or [`Self::Delete`].
5/// These correspond to methods available on [`Vec`].
6#[derive(Debug, PartialEq, Clone, serde::Serialize, serde::Deserialize, Eq, Hash, Default)]
7pub enum Operation {
8	#[default]
9	#[serde(rename = "add")]
10	#[serde(alias = "add/system")]
11	#[serde(alias = "insert")]
12	#[serde(alias = "insert/system")]
13	Insert,
14	#[serde(rename = "delete")]
15	#[serde(alias = "delete/system")]
16	#[serde(alias = "remove")]
17	#[serde(alias = "remove/system")]
18	Delete,
19}
20
21impl FromStr for Operation {
22	type Err = AtspiError;
23	fn from_str(s: &str) -> Result<Self, Self::Err> {
24		match s {
25			"add" | "add/system" | "insert" | "insert/system" => Ok(Operation::Insert),
26			"delete" | "delete/system" | "remove" | "remove/system" => Ok(Operation::Delete),
27			_ => Err(AtspiError::KindMatch(format!("{s} is not a type of Operation"))),
28		}
29	}
30}
31
32impl fmt::Display for Operation {
33	fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
34		match self {
35			Operation::Insert => write!(f, "insert"),
36			Operation::Delete => write!(f, "delete"),
37		}
38	}
39}