use serde::{Deserialize, Serialize};
use crate::types::{extraction::ArchiveEntry, tables::Table};
pub use crate::types::revisions::{CellChange, DiffLine};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "api", derive(utoipa::ToSchema))]
pub struct DiffOptions {
pub include_metadata: bool,
pub include_embedded: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_content_chars: Option<usize>,
}
impl Default for DiffOptions {
fn default() -> Self {
Self {
include_metadata: true,
include_embedded: true,
max_content_chars: None,
}
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[cfg_attr(feature = "api", derive(utoipa::ToSchema))]
pub struct ExtractionDiff {
pub content_diff: Vec<DiffHunk>,
pub tables_added: Vec<Table>,
pub tables_removed: Vec<Table>,
pub tables_changed: Vec<TableDiff>,
pub metadata_changed: serde_json::Value,
pub embedded_changes: EmbeddedChanges,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "api", derive(utoipa::ToSchema))]
pub struct DiffHunk {
pub from_line: usize,
pub from_count: usize,
pub to_line: usize,
pub to_count: usize,
pub lines: Vec<DiffLine>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "api", derive(utoipa::ToSchema))]
pub struct TableDiff {
pub from_index: usize,
pub to_index: usize,
pub cell_changes: Vec<CellChange>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[cfg_attr(feature = "api", derive(utoipa::ToSchema))]
pub struct EmbeddedChanges {
pub added: Vec<ArchiveEntry>,
pub removed: Vec<ArchiveEntry>,
pub changed: Vec<EmbeddedDiff>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "api", derive(utoipa::ToSchema))]
pub struct EmbeddedDiff {
pub path: String,
pub diff: Box<ExtractionDiff>,
}