Skip to main content

lenso_service/
story_segment.rs

1use chrono::{DateTime, Utc};
2use serde::{Deserialize, Serialize};
3use utoipa::ToSchema;
4
5pub const STORY_SEGMENT_FEED_PROTOCOL: &str = "lenso.story-segment-feed.v1";
6
7#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
8#[serde(rename_all = "camelCase")]
9pub struct StorySegmentSource {
10    pub service_id: String,
11    pub workload_id: String,
12}
13
14#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
15#[serde(rename_all = "camelCase")]
16pub struct StorySegmentOperation {
17    pub kind: String,
18    pub operation_id: String,
19}
20
21#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
22#[serde(rename_all = "camelCase")]
23pub struct StorySegmentContract {
24    pub contract_id: String,
25    pub version: String,
26}
27
28#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
29#[serde(rename_all = "camelCase")]
30pub struct StorySegmentWorkflow {
31    pub instance_id: String,
32    pub definition_owner: String,
33    pub definition_name: String,
34    pub definition_version: String,
35    #[serde(skip_serializing_if = "Option::is_none")]
36    pub step_id: Option<String>,
37    #[serde(skip_serializing_if = "Option::is_none")]
38    pub parent_instance_id: Option<String>,
39    #[serde(skip_serializing_if = "Option::is_none")]
40    pub compensation_id: Option<String>,
41    #[serde(skip_serializing_if = "Option::is_none")]
42    pub intervention_id: Option<String>,
43}
44
45#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
46#[serde(rename_all = "camelCase")]
47pub struct StorySegment {
48    pub story_id: String,
49    pub segment_id: String,
50    pub evidence_revision: u32,
51    pub source: StorySegmentSource,
52    pub operation: StorySegmentOperation,
53    pub contract: StorySegmentContract,
54    pub status: String,
55    pub attempt: u32,
56    pub started_at: DateTime<Utc>,
57    pub completed_at: DateTime<Utc>,
58    pub recorded_at: DateTime<Utc>,
59    #[serde(skip_serializing_if = "Option::is_none")]
60    pub tenant_id: Option<String>,
61    #[serde(skip_serializing_if = "Option::is_none")]
62    pub parent_segment_id: Option<String>,
63    #[serde(skip_serializing_if = "Option::is_none")]
64    pub causation_id: Option<String>,
65    #[serde(skip_serializing_if = "Option::is_none")]
66    pub workflow: Option<StorySegmentWorkflow>,
67}
68
69#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
70#[serde(rename_all = "camelCase")]
71pub struct StorySegmentFeed {
72    pub protocol: String,
73    pub source_service_id: String,
74    #[serde(skip_serializing_if = "Option::is_none")]
75    pub tenant_id: Option<String>,
76    pub retention_window_seconds: u64,
77    pub as_of: DateTime<Utc>,
78    pub segments: Vec<StorySegment>,
79    pub next_cursor: String,
80}