scout_rs 0.95.95

A Rust client for the synchornizing state with the Scout database
Documentation
use serde::{Deserialize, Serialize};

/// The entity a document template applies to (`public.document_entity`).
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum DocumentEntity {
    User,
    Herd,
    Device,
    Product,
    OperatingContext,
}

impl From<&str> for DocumentEntity {
    fn from(s: &str) -> Self {
        match s {
            "user" => DocumentEntity::User,
            "herd" => DocumentEntity::Herd,
            "device" => DocumentEntity::Device,
            "product" => DocumentEntity::Product,
            "operating_context" => DocumentEntity::OperatingContext,
            _ => DocumentEntity::User,
        }
    }
}

/// A document category/template per locality and issuer (`public.document_templates`).
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct DocumentTemplate {
    #[serde(skip_serializing_if = "Option::is_none")]
    pub id: Option<i64>,
    pub name: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub issuer_id: Option<i64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub description: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub entity_for: Option<DocumentEntity>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub localization_id: Option<i64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub compliance_resource_id: Option<i64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub document_condition_id: Option<i64>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub identifier_label: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub system_tag: Option<String>,
    #[serde(default)]
    pub categories: Vec<String>,
    #[serde(default)]
    pub is_opspec: bool,
    #[serde(default)]
    pub is_shared: bool,
    #[serde(default)]
    pub uses_expiry: bool,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub inserted_at: Option<String>,
}

#[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize)]
pub struct DocumentTemplatePatch {
    #[serde(skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub issuer_id: Option<Option<i64>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub description: Option<Option<String>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub entity_for: Option<Option<DocumentEntity>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub localization_id: Option<Option<i64>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub compliance_resource_id: Option<Option<i64>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub document_condition_id: Option<Option<i64>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub identifier_label: Option<Option<String>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub system_tag: Option<Option<String>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub categories: Option<Vec<String>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub is_opspec: Option<bool>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub is_shared: Option<bool>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub uses_expiry: Option<bool>,
}

/// Maps a document template to an ability that makes its documents relevant for a user (`public.document_template_abilities`).
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct DocumentTemplateAbility {
    #[serde(skip_serializing_if = "Option::is_none")]
    pub id: Option<i64>,
    pub document_template_id: i64,
    pub ability_id: i64,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub inserted_at: Option<String>,
}