1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
use serde::{Deserialize, Serialize};
#[derive(Copy, Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
pub enum Op {
/// Depending on the target location reference, completes one of these functions:
/// 1. The target location is an array index. Inserts a new value into the array at the specified index.
/// 2. The target location is an object parameter that does not already exist. Adds a new parameter to the object.
/// 3. The target location is an object parameter that does exist. Replaces that parameter's value.
/// 4. The value parameter defines the value to add. For more information, see 4.1. add.
#[serde(rename = "add")]
Add,
/// Removes the value at the target location. For the operation to succeed, the target location must exist.
#[serde(rename = "remove")]
Remove,
/// Replaces the value at the target location with a new value. The operation object must contain a value parameter that
/// defines the replacement value. For the operation to succeed, the target location must exist.
#[serde(rename = "replace")]
Replace,
/// Removes the value at a specified location and adds it to the target location. The operation object must contain a from
/// parameter, which is a string that contains a JSON pointer value that references the location in the target document from which to
/// move the value. For the operation to succeed, the from location must exist.
#[serde(rename = "move")]
Move,
/// Copies the value at a specified location to the target location. The operation object must contain a from parameter,
/// which is a string that contains a JSON pointer value that references the location in the target document from which to copy the
/// value. For the operation to succeed, the from location must exist.
#[serde(rename = "copy")]
Copy,
/// Tests that a value at the target location is equal to a specified value. The operation object must contain a value
/// parameter that defines the value to compare to the target location's value. For the operation to succeed, the target location must
/// be equal to the value value. For test, equal indicates that the value at the target location and the value that value defines are of
/// the same JSON type. The data type of the value determines how equality is defined:
/// * **strings** Contain the same number of Unicode characters and their code points are byte-by-byte equal.
/// * **numbers** Are numerically equal.
/// * **arrays** Contain the same number of values, and each value is equal to the value at the corresponding position in the other array,
/// by using these type-specific rules.
/// * **objects** Contain the same number of parameters, and each parameter is
/// * **equal** to a parameter in the other object, by comparing their keys (as strings) and their values (by using these type-specific rules).
/// * **literals** (false, true, and null) Are the same. The comparison is a
/// logical comparison. For example, whitespace between the parameter values of an array is not significant.
/// Also, ordering of the serialization of object parameters is not significant.
#[serde(rename = "test")]
Test,
}
impl Op {
pub fn as_str(self) -> &'static str {
match self {
Op::Add => "add",
Op::Remove => "remove",
Op::Replace => "replace",
Op::Move => "move",
Op::Copy => "copy",
Op::Test => "test",
}
}
}
impl Default for Op {
fn default() -> Self {
Op::Add
}
}
impl AsRef<str> for Op {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl std::fmt::Display for Op {
fn fmt(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
self.as_str().fmt(formatter)
}
}