lenso_service/
story_segment.rs1use 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}