use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use super::{BlockId, ChangeId};
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub struct TrackedChange {
pub id: ChangeId,
pub kind: TrackedChangeKind,
pub author: Option<String>,
pub date: Option<DateTime<Utc>>,
pub block_ids: Vec<BlockId>,
pub excerpt: Option<String>,
pub move_pair_id: Option<String>,
pub raw_revision_ids: RawRevisionIds,
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub enum TrackedChangeKind {
Insert { text: String },
Delete { text: String },
Replacement { old_text: String, new_text: String },
MoveFrom { text: String },
MoveTo { text: String },
Format { previous_props_summary: String },
}
#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub struct RawRevisionIds {
pub insert: Option<String>,
pub delete: Option<String>,
pub move_from: Option<String>,
pub move_to: Option<String>,
pub format: Option<String>,
}