Skip to main content

dpm_model/work/
contract.rs

1//! Authored work scope and readiness requirements.
2
3use crate::*;
4use serde::{Deserialize, Serialize};
5use std::collections::BTreeSet;
6
7/// The authored scope an executor must satisfy.
8#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
9#[serde(deny_unknown_fields)]
10pub struct WorkContract {
11    /// Observable purpose of this work.
12    pub objective: String,
13    /// Evidence requirements for executable work.
14    pub acceptance: Vec<AcceptanceCriterion>,
15    /// Optional ordered procedure and scope; absent in plans that do not supply instructions.
16    #[serde(default, skip_serializing_if = "Option::is_none")]
17    pub instructions: Option<crate::WorkInstructions>,
18    /// Capabilities required of a recommended worker.
19    pub capabilities: BTreeSet<String>,
20    /// Requirements implemented by this work.
21    pub requirement_ids: BTreeSet<RequirementId>,
22    /// Explicit read/write needs; an empty set permits work without repository assets.
23    pub assets: Vec<crate::AssetRequirement>,
24    /// Decision option this work and its descendants apply to; absent means unconditional.
25    #[serde(default, skip_serializing_if = "Option::is_none")]
26    pub condition: Option<crate::WorkCondition>,
27    /// How a task or milestone treats incoming constraints from work a choice excluded.
28    #[serde(default, skip_serializing_if = "crate::JoinPolicy::is_default")]
29    pub join: crate::JoinPolicy,
30}