use crate::documents::{DiagnosticDocument, EventWriteDocument, ValidationCheckViewDocument};
use crate::model::{ValidationStatus, ValidationTarget};
use crate::session::{DelegationMap, ValidationAddResult, ValidationListResult};
#[derive(serde::Serialize)]
#[serde(rename_all = "camelCase")]
pub struct ValidationAddBody {
revision_id: String,
validation_check_id: String,
event_id: String,
track_id: String,
target: ValidationTarget,
status: ValidationStatus,
#[serde(skip_serializing_if = "Option::is_none")]
summary_content_hash: Option<String>,
}
#[derive(serde::Serialize)]
#[serde(rename_all = "camelCase")]
pub struct ValidationListBody {
revision_id: String,
filters: ValidationListFiltersDocument,
validation_checks: Vec<ValidationCheckViewDocument>,
}
#[derive(serde::Serialize)]
#[serde(rename_all = "camelCase")]
struct ValidationListFiltersDocument {
#[serde(skip_serializing_if = "Option::is_none")]
track_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
status: Option<ValidationStatus>,
include_body: bool,
}
pub fn validation_add_document(
result: ValidationAddResult,
) -> EventWriteDocument<ValidationAddBody> {
EventWriteDocument::new(
"shore.review-validation-add",
ValidationAddBody {
revision_id: result.revision_id.as_str().to_owned(),
validation_check_id: result.validation_check_id.as_str().to_owned(),
event_id: result.event_id.as_str().to_owned(),
track_id: result.track_id.as_str().to_owned(),
target: result.target,
status: result.status,
summary_content_hash: result.summary_content_hash,
},
result.events_created,
result.events_existing,
result.events_created_by_type,
result.diagnostics,
)
}
pub fn validation_list_document(
result: ValidationListResult,
delegation_map: Option<&DelegationMap>,
) -> DiagnosticDocument<ValidationListBody> {
DiagnosticDocument::new(
"shore.review-validation-list",
ValidationListBody {
revision_id: result.revision_id.as_str().to_owned(),
filters: ValidationListFiltersDocument {
track_id: result
.filters
.track_id
.map(|track_id| track_id.as_str().to_owned()),
status: result.filters.status,
include_body: result.filters.include_body,
},
validation_checks: result
.validation_checks
.into_iter()
.map(|view| {
ValidationCheckViewDocument::from(view).with_resolved_principal(delegation_map)
})
.collect(),
},
result.diagnostics,
)
}