use std::fmt;
use std::time::Duration;
use log::info;
use serde_derive::{Deserialize, Serialize};
use crate::model::flow_manifest::FlowManifest;
#[derive(Serialize, Deserialize, PartialEq, Eq, Debug, Clone)]
pub struct Submission {
pub manifest: FlowManifest,
pub max_parallel_jobs: Option<usize>,
pub job_timeout: Option<Duration>,
#[cfg(feature = "debugger")]
pub debug_enabled: bool,
}
impl Submission {
pub fn new(
manifest: FlowManifest,
max_parallel_jobs: Option<usize>,
job_timeout: Option<Duration>,
#[cfg(feature = "debugger")] debug: bool,
) -> Submission {
if let Some(limit) = max_parallel_jobs {
info!("Maximum jobs in parallel limited to {limit}");
}
Submission {
manifest,
max_parallel_jobs,
job_timeout,
#[cfg(feature = "debugger")]
debug_enabled: debug,
}
}
}
impl fmt::Display for Submission {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
if let Some(limit) = self.max_parallel_jobs {
writeln!(f, "Maximum Parallel Jobs: {limit}")?;
}
writeln!(f, " Job Timeout: {:?}", self.job_timeout)?;
#[cfg(feature = "debugger")]
writeln!(f, " Debug: {}", self.debug_enabled)?;
write!(f, " Manifest: \n{}", self.manifest)
}
}