Skip to main content

kmp_plugin_api/application/dto/
derivation_operand.rs

1use serde::{Deserialize, Serialize};
2
3use crate::domain::interpreted_value::InterpretedValue;
4use crate::domain::operand_label::OperandLabel;
5use crate::domain::operand_role::OperandRole;
6
7#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
8pub struct DerivationOperand {
9    pub ref_id: String,
10    pub label: OperandLabel,
11    #[serde(skip_serializing_if = "Option::is_none")]
12    pub role: Option<OperandRole>,
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub entity: Option<String>,
15    #[serde(skip_serializing_if = "Option::is_none")]
16    pub value: Option<InterpretedValue>,
17    #[serde(skip_serializing_if = "Option::is_none")]
18    pub raw: Option<String>,
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub reason: Option<String>,
21}
22
23impl DerivationOperand {
24    pub fn included(ref_id: impl Into<String>, value: InterpretedValue) -> Self {
25        Self {
26            ref_id: ref_id.into(),
27            label: OperandLabel::Include,
28            role: None,
29            entity: None,
30            value: Some(value),
31            raw: None,
32            reason: None,
33        }
34    }
35
36    pub fn with_role(mut self, role: OperandRole) -> Self {
37        self.role = Some(role);
38        self
39    }
40
41    pub fn with_entity(mut self, entity: impl Into<String>) -> Self {
42        self.entity = Some(entity.into());
43        self
44    }
45}