lenso-service 0.1.24

Public contracts for Lenso Providers and Autonomous Services.
Documentation
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use utoipa::ToSchema;

pub const STORY_SEGMENT_FEED_PROTOCOL: &str = "lenso.story-segment-feed.v1";

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "camelCase")]
pub struct StorySegmentSource {
    pub service_id: String,
    pub workload_id: String,
}

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "camelCase")]
pub struct StorySegmentOperation {
    pub kind: String,
    pub operation_id: String,
}

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "camelCase")]
pub struct StorySegmentContract {
    pub contract_id: String,
    pub version: String,
}

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "camelCase")]
pub struct StorySegmentWorkflow {
    pub instance_id: String,
    pub definition_owner: String,
    pub definition_name: String,
    pub definition_version: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub step_id: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub parent_instance_id: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub compensation_id: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub intervention_id: Option<String>,
}

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "camelCase")]
pub struct StorySegment {
    pub story_id: String,
    pub segment_id: String,
    pub evidence_revision: u32,
    pub source: StorySegmentSource,
    pub operation: StorySegmentOperation,
    pub contract: StorySegmentContract,
    pub status: String,
    pub attempt: u32,
    pub started_at: DateTime<Utc>,
    pub completed_at: DateTime<Utc>,
    pub recorded_at: DateTime<Utc>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub tenant_id: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub parent_segment_id: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub causation_id: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub workflow: Option<StorySegmentWorkflow>,
}

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "camelCase")]
pub struct StorySegmentFeed {
    pub protocol: String,
    pub source_service_id: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub tenant_id: Option<String>,
    pub retention_window_seconds: u64,
    pub as_of: DateTime<Utc>,
    pub segments: Vec<StorySegment>,
    pub next_cursor: String,
}