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