ddex_builder/linker/
types.rs1use std::fmt;
4use thiserror::Error;
5
6#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
8pub enum EntityType {
9 Release,
10 Resource,
11 Party,
12 Deal,
13 TechnicalDetails,
14 RightsController,
15}
16
17impl fmt::Display for EntityType {
18 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
19 match self {
20 Self::Release => write!(f, "Release"),
21 Self::Resource => write!(f, "Resource"),
22 Self::Party => write!(f, "Party"),
23 Self::Deal => write!(f, "Deal"),
24 Self::TechnicalDetails => write!(f, "TechnicalDetails"),
25 Self::RightsController => write!(f, "RightsController"),
26 }
27 }
28}
29
30#[derive(Debug, Clone)]
32pub enum ReferenceStyle {
33 Sequential,
35
36 Prefixed { separator: String },
38
39 Custom(fn(EntityType, u32) -> String),
41}
42
43impl Default for ReferenceStyle {
44 fn default() -> Self {
45 Self::Sequential
46 }
47}
48
49#[derive(Debug, Clone)]
51pub struct LinkerConfig {
52 pub reference_style: ReferenceStyle,
54
55 pub auto_link: bool,
57
58 pub validate_on_build: bool,
60
61 pub strict: bool,
63}
64
65impl Default for LinkerConfig {
66 fn default() -> Self {
67 Self {
68 reference_style: ReferenceStyle::default(),
69 auto_link: true,
70 validate_on_build: true,
71 strict: false,
72 }
73 }
74}
75
76#[derive(Debug, Clone)]
78pub struct ReleaseResourceReference {
79 pub release_reference: String,
80 pub resource_reference: String,
81 pub sequence_number: u32,
82}
83
84#[derive(Debug, Clone, Default)]
86pub struct LinkingReport {
87 pub generated_refs: usize,
88 pub linked_resources: usize,
89 pub linked_deals: usize,
90 pub linked_parties: usize,
91 pub validation_passed: bool,
92 pub warnings: Vec<String>,
93}
94
95#[derive(Debug, Error)]
97pub enum LinkerError {
98 #[error("Unknown resource: {0}")]
99 UnknownResource(String),
100
101 #[error("Unknown release: {0}")]
102 UnknownRelease(String),
103
104 #[error("Orphaned reference: {0}")]
105 OrphanedReference(String),
106
107 #[error("Broken reference from {from} to {to}")]
108 BrokenReference { from: String, to: String },
109
110 #[error("Duplicate reference: {0}")]
111 DuplicateReference(String),
112
113 #[error("Circular reference detected: {0}")]
114 CircularReference(String),
115
116 #[error("Invalid entity type: {0}")]
117 InvalidEntityType(String),
118
119 #[error("Validation failed: {0}")]
120 ValidationFailed(String),
121}