kmp-plugin-api 0.6.0

Public plugin API for the KMP kernel: evidence value and derivation traits, free of kernel internals
Documentation
use serde::{Deserialize, Serialize};

use crate::domain::interpreted_value::InterpretedValue;
use crate::domain::operand_label::OperandLabel;
use crate::domain::operand_role::OperandRole;

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct DerivationOperand {
    pub ref_id: String,
    pub label: OperandLabel,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub role: Option<OperandRole>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub entity: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub value: Option<InterpretedValue>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub raw: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub reason: Option<String>,
}

impl DerivationOperand {
    pub fn included(ref_id: impl Into<String>, value: InterpretedValue) -> Self {
        Self {
            ref_id: ref_id.into(),
            label: OperandLabel::Include,
            role: None,
            entity: None,
            value: Some(value),
            raw: None,
            reason: None,
        }
    }

    pub fn with_role(mut self, role: OperandRole) -> Self {
        self.role = Some(role);
        self
    }

    pub fn with_entity(mut self, entity: impl Into<String>) -> Self {
        self.entity = Some(entity.into());
        self
    }
}