Skip to main content

appcore_contracts/policy/
scheduler.rs

1// =============================================================================
2//        #######
3//     ###       ###     F: scheduler.rs
4//    ##   ## ##   ##    P: AppCore-Runtime
5//         ## ##
6//                       C: 2026/07/22 15:41:18 by dnettoRaw
7//    ##   ## ##   ##    U: 2026/07/22 15:41:18 by dnettoRaw
8//      ###########      S: 1.0.1-rc.8
9// =============================================================================
10
11use super::*;
12
13/// Scheduler requirements declared by an application.
14#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
15pub struct SchedulerRequirements {
16    required: bool,
17    max_concurrency: u32,
18}
19
20impl SchedulerRequirements {
21    /// Creates scheduler requirements.
22    pub fn new(required: bool, max_concurrency: u32) -> ContractResult<Self> {
23        if required && max_concurrency == 0 {
24            return Err(ContractError::InvalidValue {
25                field: "scheduler.max_concurrency",
26                reason: "must be greater than zero when a scheduler is required",
27            });
28        }
29        Ok(Self {
30            required,
31            max_concurrency,
32        })
33    }
34
35    /// Reports whether a scheduler is required.
36    pub fn is_required(&self) -> bool {
37        self.required
38    }
39
40    /// Returns the requested scheduler concurrency.
41    pub fn max_concurrency(&self) -> u32 {
42        self.max_concurrency
43    }
44
45    pub(crate) fn validate(&self) -> ContractResult<()> {
46        if self.required && self.max_concurrency == 0 {
47            return Err(ContractError::InvalidValue {
48                field: "scheduler.max_concurrency",
49                reason: "must be greater than zero when a scheduler is required",
50            });
51        }
52        Ok(())
53    }
54}