#![warn(missing_docs)]
#[cfg(test)]
mod tests;
#[doc(hidden)]
pub use serde as _serde;
use serde::{de, ser::SerializeSeq};
pub use serde_diff_derive::SerdeDiff;
#[doc(hidden)]
pub(crate) mod apply;
pub(crate) mod config;
pub(crate) mod counting_serializer;
#[doc(hidden)]
pub(crate) mod difference;
pub(crate) mod implementation;
pub use apply::Apply;
pub use config::Config;
pub use difference::Diff;
pub use apply::ApplyContext;
pub use difference::DiffContext;
pub use difference::DiffPathElementValue;
pub trait SerdeDiff {
fn diff<'a, S: SerializeSeq>(
&self,
ctx: &mut difference::DiffContext<'a, S>,
other: &Self,
) -> Result<bool, S::Error>;
fn apply<'de, A>(
&mut self,
seq: &mut A,
ctx: &mut apply::ApplyContext,
) -> Result<bool, <A as de::SeqAccess<'de>>::Error>
where
A: de::SeqAccess<'de>;
}
#[derive(Copy, Clone)]
pub enum FieldPathMode {
Name,
Index,
}
pub(crate) enum ElementStackEntry<'a, S: SerializeSeq> {
PathElement(difference::DiffPathElementValue<'a>),
Closure(&'a dyn Fn(&mut S) -> Result<(), S::Error>),
}