essentia_core/data/
constraints.rs1use crate::data::types::{DataType, HasDataType, phantom};
2
3pub trait ParameterData: HasDataType {}
4
5pub trait InputOutputData: HasDataType {}
6
7pub trait PoolData: HasDataType {}
8
9pub trait ValidateConstraint<T> {
10 const IS_VALID: bool;
11
12 fn validate() -> Result<(), &'static str> {
13 if Self::IS_VALID {
14 Ok(())
15 } else {
16 Err("Type constraint violation")
17 }
18 }
19}
20
21impl ParameterData for phantom::Float {}
22impl ParameterData for phantom::String {}
23impl ParameterData for phantom::Bool {}
24impl ParameterData for phantom::Int {}
25impl ParameterData for phantom::StereoSample {}
26impl ParameterData for phantom::VectorFloat {}
27impl ParameterData for phantom::VectorString {}
28impl ParameterData for phantom::VectorBool {}
29impl ParameterData for phantom::VectorInt {}
30impl ParameterData for phantom::VectorStereoSample {}
31impl ParameterData for phantom::VectorVectorFloat {}
32impl ParameterData for phantom::VectorVectorString {}
33impl ParameterData for phantom::VectorVectorStereoSample {}
34impl ParameterData for phantom::VectorMatrixFloat {}
35impl ParameterData for phantom::MapVectorFloat {}
36impl ParameterData for phantom::MapVectorString {}
37impl ParameterData for phantom::MapVectorInt {}
38impl ParameterData for phantom::MapFloat {}
39impl ParameterData for phantom::MatrixFloat {}
40
41impl InputOutputData for phantom::Float {}
42impl InputOutputData for phantom::UnsignedInt {}
43impl InputOutputData for phantom::Long {}
44impl InputOutputData for phantom::String {}
45impl InputOutputData for phantom::Bool {}
46impl InputOutputData for phantom::Int {}
47impl InputOutputData for phantom::StereoSample {}
48impl InputOutputData for phantom::Complex {}
49impl InputOutputData for phantom::TensorFloat {}
50impl InputOutputData for phantom::VectorFloat {}
51impl InputOutputData for phantom::VectorString {}
52impl InputOutputData for phantom::VectorBool {}
53impl InputOutputData for phantom::VectorInt {}
54impl InputOutputData for phantom::VectorStereoSample {}
55impl InputOutputData for phantom::VectorComplex {}
56impl InputOutputData for phantom::VectorVectorFloat {}
57impl InputOutputData for phantom::VectorVectorString {}
58impl InputOutputData for phantom::VectorVectorStereoSample {}
59impl InputOutputData for phantom::VectorVectorComplex {}
60impl InputOutputData for phantom::VectorMatrixFloat {}
61impl InputOutputData for phantom::MapVectorFloat {}
62impl InputOutputData for phantom::MapVectorString {}
63impl InputOutputData for phantom::MapVectorInt {}
64impl InputOutputData for phantom::MapVectorComplex {}
65impl InputOutputData for phantom::MapFloat {}
66impl InputOutputData for phantom::MatrixFloat {}
67impl InputOutputData for phantom::Pool {}
68
69impl PoolData for phantom::Float {}
70impl PoolData for phantom::String {}
71impl PoolData for phantom::StereoSample {}
72impl PoolData for phantom::VectorFloat {}
73impl PoolData for phantom::VectorString {}
74impl PoolData for phantom::VectorStereoSample {}
75impl PoolData for phantom::TensorFloat {}
76
77pub struct ParameterConstraint<T>(std::marker::PhantomData<T>);
78
79impl<T: ParameterData> ValidateConstraint<T> for ParameterConstraint<T> {
80 const IS_VALID: bool = true;
81}
82
83pub struct InputOutputConstraint<T>(std::marker::PhantomData<T>);
84
85impl<T: InputOutputData> ValidateConstraint<T> for InputOutputConstraint<T> {
86 const IS_VALID: bool = true;
87}
88
89pub struct PoolConstraint<T>(std::marker::PhantomData<T>);
90
91impl<T: PoolData> ValidateConstraint<T> for PoolConstraint<T> {
92 const IS_VALID: bool = true;
93}
94
95pub const fn is_valid_parameter_type(data_type: DataType) -> bool {
96 matches!(
97 data_type,
98 DataType::Float
99 | DataType::String
100 | DataType::Bool
101 | DataType::Int
102 | DataType::StereoSample
103 | DataType::VectorFloat
104 | DataType::VectorString
105 | DataType::VectorBool
106 | DataType::VectorInt
107 | DataType::VectorStereoSample
108 | DataType::VectorVectorFloat
109 | DataType::VectorVectorString
110 | DataType::VectorVectorStereoSample
111 | DataType::VectorMatrixFloat
112 | DataType::MapVectorFloat
113 | DataType::MapVectorString
114 | DataType::MapVectorInt
115 | DataType::MapFloat
116 | DataType::MatrixFloat
117 )
118}
119
120pub const fn is_valid_input_output_type(data_type: DataType) -> bool {
121 matches!(
122 data_type,
123 DataType::Float
124 | DataType::UnsignedInt
125 | DataType::Long
126 | DataType::String
127 | DataType::Bool
128 | DataType::Int
129 | DataType::StereoSample
130 | DataType::Complex
131 | DataType::TensorFloat
132 | DataType::VectorFloat
133 | DataType::VectorString
134 | DataType::VectorBool
135 | DataType::VectorInt
136 | DataType::VectorStereoSample
137 | DataType::VectorComplex
138 | DataType::VectorVectorFloat
139 | DataType::VectorVectorString
140 | DataType::VectorVectorStereoSample
141 | DataType::VectorVectorComplex
142 | DataType::VectorMatrixFloat
143 | DataType::MapVectorFloat
144 | DataType::MapVectorString
145 | DataType::MapVectorInt
146 | DataType::MapVectorComplex
147 | DataType::MapFloat
148 | DataType::MatrixFloat
149 | DataType::Pool
150 )
151}
152
153pub const fn is_valid_pool_type(data_type: DataType) -> bool {
154 matches!(
155 data_type,
156 DataType::Float
157 | DataType::String
158 | DataType::StereoSample
159 | DataType::VectorFloat
160 | DataType::VectorString
161 | DataType::VectorStereoSample
162 | DataType::TensorFloat
163 )
164}