use crate::documents::DiagnosticDocument;
use crate::session::{ReviewHistoryEntry, ReviewHistoryFilters, ReviewHistoryResult};
#[derive(serde::Serialize)]
#[serde(rename_all = "camelCase")]
pub struct HistoryBody {
#[serde(skip_serializing_if = "Option::is_none")]
event_set_hash: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
projection_stamp: Option<String>,
event_count: usize,
history_count: usize,
filters: ReviewHistoryFilters,
entries: Vec<ReviewHistoryEntry>,
next_cursor: Option<String>,
}
pub fn history_document(result: ReviewHistoryResult) -> DiagnosticDocument<HistoryBody> {
history_document_with_identity(result, None)
}
#[doc(hidden)]
pub fn derived_history_document(
result: ReviewHistoryResult,
projection_stamp: String,
) -> DiagnosticDocument<HistoryBody> {
history_document_with_identity(result, Some(projection_stamp))
}
fn history_document_with_identity(
result: ReviewHistoryResult,
projection_stamp: Option<String>,
) -> DiagnosticDocument<HistoryBody> {
let history_count = result.history_count();
let event_set_hash = projection_stamp.is_none().then_some(result.event_set_hash);
DiagnosticDocument::new(
"pointbreak.review-history",
HistoryBody {
event_set_hash,
projection_stamp,
event_count: result.event_count,
history_count,
filters: result.filters,
entries: result.entries,
next_cursor: result.next_cursor,
},
result.diagnostics,
)
}