ddex_core/models/flat/
message.rs

1// core/src/models/flat/message.rs
2//! Flattened message types
3
4use 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    /// Extensions from the original XML that need preservation
15    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    /// Extensions for flattened message
51    pub extensions: Option<Extensions>,
52}
53
54#[derive(Debug, Clone, Serialize, Deserialize)]
55pub struct Organization {
56    pub name: String,
57    pub id: String,
58    /// Extensions for organization
59    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}