#[cfg(doc)]
use super::Batch;
use super::BatchHandle;
use crate::error::Error;
use crate::proto::{BatchId, Client};
use chrono::{DateTime, Utc};
#[derive(Copy, Clone, Debug, Deserialize, Eq, PartialEq)]
#[non_exhaustive]
pub enum CallbackState {
#[serde(rename = "")]
Pending,
#[serde(rename = "1")]
Enqueued,
#[serde(rename = "2")]
FinishedOk,
}
impl std::fmt::Display for CallbackState {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
use CallbackState::*;
let s = match self {
Pending => "Pending",
Enqueued => "Enqueued",
FinishedOk => "FinishedOk",
};
write!(f, "{}", s)
}
}
#[derive(Deserialize, Debug)]
pub struct BatchStatus {
pub bid: BatchId,
pub created_at: DateTime<Utc>,
pub description: Option<String>,
pub total: usize,
pub pending: usize,
pub failed: usize,
pub parent_bid: Option<BatchId>,
#[serde(rename = "complete_st")]
pub complete_callback_state: CallbackState,
#[serde(rename = "success_st")]
pub success_callback_state: CallbackState,
}
impl<'a> BatchStatus {
pub async fn open(&self, prod: &'a mut Client) -> Result<Option<BatchHandle<'a>>, Error> {
prod.open_batch(&self.bid).await
}
}