use super::*;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct JobPolicy {
enabled: bool,
max_concurrency: u32,
retry_limit: u32,
}
impl JobPolicy {
pub fn new(enabled: bool, max_concurrency: u32, retry_limit: u32) -> ContractResult<Self> {
if enabled && max_concurrency == 0 {
return Err(ContractError::InvalidValue {
field: "jobs.max_concurrency",
reason: "must be greater than zero when jobs are enabled",
});
}
Ok(Self {
enabled,
max_concurrency,
retry_limit,
})
}
pub fn disabled() -> Self {
Self {
enabled: false,
max_concurrency: 0,
retry_limit: 0,
}
}
pub fn is_enabled(&self) -> bool {
self.enabled
}
pub fn max_concurrency(&self) -> u32 {
self.max_concurrency
}
pub fn retry_limit(&self) -> u32 {
self.retry_limit
}
pub(crate) fn validate(&self) -> ContractResult<()> {
if self.enabled && self.max_concurrency == 0 {
return Err(ContractError::InvalidValue {
field: "jobs.max_concurrency",
reason: "must be greater than zero when jobs are enabled",
});
}
Ok(())
}
}