lib.rs
raw
use std::marker::PhantomData;
#[derive(Error, Debug)]
pub enum Error {}
#[derive(Default)]
#[cfg_attr(
feature = "with-serde",
derive(::serde::Serialize, ::serde::Deserialize)
)]
pub struct Update<T> {
set: Option<T>,
remove: Option<bool>,
merge: Option<T>,
discard: Option<T>,
}
impl<T> Update {
pub fn set(self, value: T) -> Self {
self.set = Some(value);
self
}
pub fn remove(self, value: bool) -> Self {
self.remove = Some(value);
self
}
pub fn merge(self, value: T) -> Self {
self.merge = Some(value);
self
}
pub fn discard(self, value: T) -> Self {
self.discard = Some(value);
self
}
}
impl<T> ::std::fmt::Debug for Update<T>
where
T: Debug,
{
fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(formatter, "Operation { set: ")?;
self.set.fmt(&self.set, formatter)?;
write!(formatter, ", remove: ")?;
self.remove.fmt(&self.set, formatter)?;
write!(formatter, ", merge: ")?;
self.merge.fmt(&self.set, formatter)?;
write!(formatter, ", discard: ")?;
self.discard.fmt(&self.set, formatter)?;
write!(formatter, "}")
}
}
pub trait Patch {
type Target;
fn apply(&self, target: &mut Target) -> Result<(), Error>;
}
#[cfg(test)]
mod tests {
#[test]
fn it_works() {
assert_eq!(2 + 2, 4);
}
}