ddex_core/models/flat/
deal.rs

1// core/src/models/flat/deal.rs
2//! Parsed deal types
3
4use crate::models::common::Price;
5use chrono::{DateTime, Utc};
6use serde::{Deserialize, Serialize};
7
8#[derive(Debug, Clone, Serialize, Deserialize)]
9pub struct ParsedDeal {
10    pub deal_id: String,
11    pub releases: Vec<String>,
12    pub validity: DealValidity,
13    pub territories: TerritoryComplexity,
14    pub distribution_channels: DistributionComplexity,
15    pub pricing: Vec<PriceTier>,
16    pub usage_rights: Vec<String>,
17    pub restrictions: Vec<String>,
18}
19
20#[derive(Debug, Clone, Serialize, Deserialize)]
21pub struct DealValidity {
22    pub start: Option<DateTime<Utc>>,
23    pub end: Option<DateTime<Utc>>,
24}
25
26#[derive(Debug, Clone, Serialize, Deserialize)]
27pub struct TerritoryComplexity {
28    pub included: Vec<String>,
29    pub excluded: Vec<String>,
30}
31
32#[derive(Debug, Clone, Serialize, Deserialize)]
33pub struct DistributionComplexity {
34    pub included: Vec<String>,
35    pub excluded: Vec<String>,
36}
37
38#[derive(Debug, Clone, Serialize, Deserialize)]
39pub struct PriceTier {
40    pub tier_name: Option<String>,
41    pub price_type: PriceType,
42    pub price: Price,
43    pub territory: Option<String>,
44    pub start_date: Option<DateTime<Utc>>,
45    pub end_date: Option<DateTime<Utc>>,
46}
47
48#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
49pub enum PriceType {
50    Wholesale,
51    SuggestedRetail,
52    Minimum,
53}
54
55#[derive(Debug, Clone, Serialize, Deserialize)]
56pub struct TerritoryInfo {
57    pub code: String,
58    pub included: bool,
59    pub start_date: Option<DateTime<Utc>>,
60    pub end_date: Option<DateTime<Utc>>,
61    pub distribution_channels: Vec<String>,
62}