fallow_mutation/
operator.rs1use serde::Serialize;
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize)]
10#[serde(rename_all = "kebab-case")]
11pub enum Operator {
12 ArithmeticOperator,
14 RelationalOperator,
16 LogicalOperator,
18 NegateCondition,
20 UnaryOperator,
22 UpdateOperator,
24 RemovedCall,
26 ReturnValue,
28 BooleanLiteral,
30 StringLiteral,
32 OptionalChaining,
34}
35
36impl Operator {
37 pub const ALL: [Self; 11] = [
39 Self::ArithmeticOperator,
40 Self::RelationalOperator,
41 Self::LogicalOperator,
42 Self::NegateCondition,
43 Self::UnaryOperator,
44 Self::UpdateOperator,
45 Self::RemovedCall,
46 Self::ReturnValue,
47 Self::BooleanLiteral,
48 Self::StringLiteral,
49 Self::OptionalChaining,
50 ];
51
52 pub const fn as_str(self) -> &'static str {
54 match self {
55 Self::ArithmeticOperator => "arithmetic-operator",
56 Self::RelationalOperator => "relational-operator",
57 Self::LogicalOperator => "logical-operator",
58 Self::NegateCondition => "negate-condition",
59 Self::UnaryOperator => "unary-operator",
60 Self::UpdateOperator => "update-operator",
61 Self::RemovedCall => "removed-call",
62 Self::ReturnValue => "return-value",
63 Self::BooleanLiteral => "boolean-literal",
64 Self::StringLiteral => "string-literal",
65 Self::OptionalChaining => "optional-chaining",
66 }
67 }
68
69 pub fn from_name(name: &str) -> Option<Self> {
71 Self::ALL
72 .into_iter()
73 .find(|operator| operator.as_str() == name)
74 }
75}
76
77impl std::fmt::Display for Operator {
78 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
79 f.write_str(self.as_str())
80 }
81}