monoloop_loop/transaction/lifecycle/
terminal.rs1use monoloop_contracts::{
4 CleanupStatus, TerminalEventDelivery, TransactionCompletion, TransactionEndEvent,
5 TransactionEndKind, TransactionId,
6};
7
8#[derive(Clone, Debug, PartialEq, Eq)]
10pub struct TerminalDecision {
11 pub kind: TransactionEndKind,
13}
14
15impl TerminalDecision {
16 pub fn new(kind: TransactionEndKind) -> Self {
18 Self { kind }
19 }
20}
21
22#[derive(Clone, Debug, PartialEq, Eq)]
24pub struct TerminalProposal {
25 pub kind: TransactionEndKind,
27}
28
29impl TerminalProposal {
30 pub fn new(kind: TransactionEndKind) -> Self {
32 Self { kind }
33 }
34}
35
36pub fn build_completion(
38 end: TransactionEndEvent,
39 terminal_event_delivery: TerminalEventDelivery,
40 cleanup: CleanupStatus,
41) -> TransactionCompletion {
42 TransactionCompletion {
43 end,
44 terminal_event_delivery,
45 cleanup,
46 }
47}
48
49pub fn end_event(
51 transaction_id: TransactionId,
52 channel_id: monoloop_contracts::ChannelId,
53 session_id: Option<monoloop_contracts::SessionId>,
54 kind: TransactionEndKind,
55 emitted_events: u64,
56) -> TransactionEndEvent {
57 TransactionEndEvent {
58 transaction_id,
59 session_id,
60 channel_id,
61 kind,
62 emitted_events,
63 usage: monoloop_contracts::TransactionUsage::default(),
64 diagnostics: Vec::new(),
65 }
66}