use crate::server::{attrs::Attr, blobref::BlobRef}; use rand::{thread_rng, Rng}; use serde::{Deserialize, Serialize}; use time::OffsetDateTime; #[derive(Serialize, Deserialize)] #[serde(rename_all = "kebab-case")] pub(super) struct Anchor { rand: u64, #[serde(with = "time::serde::rfc3339")] created_at: OffsetDateTime, } #[derive(Debug, Serialize, Deserialize)] #[serde(rename_all = "kebab-case")] pub(super) struct Patch { pub anchor: BlobRef, pub changes: Vec, #[serde(with = "time::serde::rfc3339")] created_at: OffsetDateTime, } #[derive(Debug, Serialize, Deserialize)] #[serde(rename_all = "kebab-case")] // #[allow(clippy::enum_variant_names)] pub(super) enum Change { AddChunk { blobref: BlobRef, offset: u64, size: usize, }, SetAttr(Attr), } impl Anchor { pub(super) fn new() -> Self { Self { rand: thread_rng().gen(), created_at: OffsetDateTime::now_utc(), } } } impl Patch { pub(super) fn new(anchor: BlobRef) -> Self { Self { anchor, changes: Vec::new(), created_at: OffsetDateTime::now_utc(), } } pub(super) fn add_change(&mut self, change: Change) { self.changes.push(change); } }