imferno_core/validation/
isxd_codes.rs1use crate::diagnostics::codes::ValidationCode;
4use crate::diagnostics::{Category, Severity};
5
6#[derive(Debug, Clone, Copy, PartialEq, Eq)]
15pub enum IsxdCode {
16 SubDescriptorMissing,
18 NamespaceUriMissing,
20 ISXDSequenceNoResources,
22 ISXDSequenceSourceEncodingInvalid,
24 NamespaceUriMismatch,
26}
27
28macro_rules! define_isxd_enum {
33 ($name:ident, $prefix:literal) => {
34 #[doc = $prefix]
36 #[derive(Debug, Clone, Copy, PartialEq, Eq, strum::EnumIter)]
37 pub enum $name {
38 SubDescriptorMissing,
40 NamespaceUriMissing,
42 ISXDSequenceNoResources,
44 ISXDSequenceSourceEncodingInvalid,
46 NamespaceUriMismatch,
48 }
49
50 impl ValidationCode for $name {
51 fn code(&self) -> &'static str {
52 match self {
53 Self::SubDescriptorMissing => concat!($prefix, ":5/SubDescriptorMissing"),
54 Self::NamespaceUriMissing => concat!($prefix, ":5/NamespaceUriMissing"),
55 Self::ISXDSequenceNoResources => concat!($prefix, ":6/ISXDSequenceNoResources"),
56 Self::ISXDSequenceSourceEncodingInvalid => concat!($prefix, ":6/ISXDSequenceSourceEncodingInvalid"),
57 Self::NamespaceUriMismatch => concat!($prefix, ":6/NamespaceUriMismatch"),
58 }
59 }
60 fn description(&self) -> &'static str {
61 match self {
62 Self::SubDescriptorMissing =>
63 "ISXDDataEssenceDescriptor: ContainerConstraintsSubDescriptor shall be present.",
64 Self::NamespaceUriMissing =>
65 "ISXDDataEssenceDescriptor: NamespaceURI is absent.",
66 Self::ISXDSequenceNoResources =>
67 "ISXDSequence shall contain at least one Resource.",
68 Self::ISXDSequenceSourceEncodingInvalid =>
69 "ISXDSequence Resource.SourceEncoding does not reference an ISXDDataEssenceDescriptor.",
70 Self::NamespaceUriMismatch =>
71 "Resources in the same ISXDSequence reference descriptors with inconsistent NamespaceURI values.",
72 }
73 }
74 fn default_severity(&self) -> Severity {
75 match self {
76 Self::NamespaceUriMissing => Severity::Warning,
77 _ => Severity::Error,
78 }
79 }
80 fn category(&self) -> Category {
81 Category::Audio
82 }
83 }
84
85 impl $name {
86 pub const ALL: &'static [Self] = &[
87 Self::SubDescriptorMissing,
88 Self::NamespaceUriMissing,
89 Self::ISXDSequenceNoResources,
90 Self::ISXDSequenceSourceEncodingInvalid,
91 Self::NamespaceUriMismatch,
92 ];
93
94 pub fn for_code(r: IsxdCode) -> &'static str {
97 match r {
98 IsxdCode::SubDescriptorMissing => concat!($prefix, ":5/SubDescriptorMissing"),
99 IsxdCode::NamespaceUriMissing => concat!($prefix, ":5/NamespaceUriMissing"),
100 IsxdCode::ISXDSequenceNoResources => concat!($prefix, ":6/ISXDSequenceNoResources"),
101 IsxdCode::ISXDSequenceSourceEncodingInvalid => concat!($prefix, ":6/ISXDSequenceSourceEncodingInvalid"),
102 IsxdCode::NamespaceUriMismatch => concat!($prefix, ":6/NamespaceUriMismatch"),
103 }
104 }
105 }
106
107 impl From<$name> for String {
108 fn from(c: $name) -> String {
109 c.code().to_string()
110 }
111 }
112 };
113}
114
115define_isxd_enum!(St2067_202_2022, "ST2067-202:2022");