use crate::prelude::*;
use serde::{Deserialize, Serialize};
use std::ops::Not;
pub(crate) struct UploadSuccess {
pub formats: Vec<UploadFormatStatus>,
pub warnings: Vec<rogue_logging::Error>,
}
#[derive(Clone, Deserialize, Serialize)]
pub(crate) struct UploadStatus {
pub success: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub formats: Option<Vec<UploadFormatStatus>>,
pub completed: TimeStamp,
#[serde(skip_serializing_if = "Option::is_none")]
pub errors: Option<Vec<rogue_logging::Error>>,
}
impl UploadStatus {
pub fn new(result: Result<UploadSuccess, Failure<UploadAction>>) -> Self {
match result {
Ok(success) => Self {
success: true,
formats: Some(success.formats),
completed: TimeStamp::now(),
errors: success
.warnings
.is_empty()
.not()
.then_some(success.warnings),
},
Err(failure) => Self {
success: false,
formats: None,
completed: TimeStamp::now(),
errors: Some(vec![failure.to_error()]),
},
}
}
}
#[derive(Clone, Deserialize, Serialize)]
pub(crate) struct UploadFormatStatus {
pub format: TargetFormat,
pub id: u32,
}