mod diff;
mod merge;
pub mod snapshot;
pub mod stream;
pub mod window;
pub use crate::diff::{Diff, diff};
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
pub enum Compression {
#[default]
None,
Deflate,
}
impl Compression {
pub(crate) const fn is_deflate(self) -> bool {
matches!(self, Self::Deflate)
}
}
#[derive(thiserror::Error, Debug, Clone)]
#[non_exhaustive]
pub enum Error {
#[error(transparent)]
Net(#[from] moq_net::Error),
#[error("json: {0}")]
Json(String),
#[error(transparent)]
Flate(#[from] moq_flate::Error),
#[error("delta before snapshot")]
MissingSnapshot,
#[error("compression desynchronized: a frame was encoded but never written")]
Desync,
#[error("stream rolled to a second group")]
Rolled,
#[error("decoded JSON exceeded {0} bytes")]
TooLarge(usize),
}
impl From<serde_json::Error> for Error {
fn from(err: serde_json::Error) -> Self {
Error::Json(err.to_string())
}
}
pub type Result<T> = std::result::Result<T, Error>;