ddex_core/models/flat/
message.rs1use super::{ParsedDeal, ParsedRelease, ParsedResource};
5use crate::models::{
6 graph::{ERNMessage, Party},
7 Extensions,
8};
9use chrono::{DateTime, Utc};
10use indexmap::IndexMap;
11use serde::{Deserialize, Serialize};
12
13#[derive(Debug, Clone, Serialize, Deserialize)]
14pub struct ParsedERNMessage {
15 pub graph: ERNMessage,
16 pub flat: FlattenedMessage,
17 pub extensions: Option<Extensions>,
19}
20
21impl ParsedERNMessage {
22 pub fn releases(&self) -> &[ParsedRelease] {
23 &self.flat.releases
24 }
25
26 pub fn resources(&self) -> &IndexMap<String, ParsedResource> {
27 &self.flat.resources
28 }
29
30 pub fn deals(&self) -> &[ParsedDeal] {
31 &self.flat.deals
32 }
33
34 pub fn parties(&self) -> &IndexMap<String, Party> {
35 &self.flat.parties
36 }
37}
38
39#[derive(Debug, Clone, Serialize, Deserialize)]
40pub struct FlattenedMessage {
41 pub message_id: String,
42 pub message_type: String,
43 pub message_date: DateTime<Utc>,
44 pub sender: Organization,
45 pub recipient: Organization,
46 pub releases: Vec<ParsedRelease>,
47 pub resources: IndexMap<String, ParsedResource>,
48 pub deals: Vec<ParsedDeal>,
49 pub parties: IndexMap<String, Party>,
50 pub version: String,
51 pub profile: Option<String>,
52 pub stats: MessageStats,
53 pub extensions: Option<Extensions>,
55}
56
57#[derive(Debug, Clone, Serialize, Deserialize)]
58pub struct Organization {
59 pub name: String,
60 pub id: String,
61 pub extensions: Option<Extensions>,
63}
64
65#[derive(Debug, Clone, Serialize, Deserialize)]
66pub struct MessageStats {
67 pub release_count: usize,
68 pub track_count: usize,
69 pub deal_count: usize,
70 pub total_duration: u64,
71}