1use core::{
2 fmt,
3 num::{NonZeroU32, NonZeroU8},
4};
5
6macro_rules! pseudo_enum {
7 ($(#[$attr:meta])* $container:ident($prim:ident) $name:ident { $($(#[$variant_attr:meta])* $case:ident = $value:literal,)* }) => {
8 $(#[$attr])*
9 #[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
10 pub struct $name($container);
11
12 #[allow(non_upper_case_globals)]
13 impl $name {
14 pub fn new(x: $prim) -> Option<Self> {
15 Some(Self($container::new(x)?))
16 }
17
18 pub fn value(&self) -> $prim {
19 self.0.get()
20 }
21
22 $(
23 $(#[$variant_attr])*
24 pub const $case: Self = Self(unsafe { $container::new_unchecked($value) });
25 )*
26
27 pub const ALL: &'static [Self] = &[$(Self::$case),*];
28 }
29
30 impl fmt::Debug for $name {
31 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
32 let name = match self.0.get() {
33 $($value => Some(stringify!($case)),)*
34 _ => None,
35 };
36 match name {
37 Some(name) => f.pad(name),
38 None => write!(f, concat!(stringify!($name), "({})"), self.0.get()),
39 }
40 }
41 }
42 };
43}
44
45pseudo_enum! {
46 NonZeroU32(u32) Format {
68 R4G4_UNORM_PACK8 = 1,
69 R4G4B4A4_UNORM_PACK16 = 2,
70 B4G4R4A4_UNORM_PACK16 = 3,
71 R5G6B5_UNORM_PACK16 = 4,
72 B5G6R5_UNORM_PACK16 = 5,
73 R5G5B5A1_UNORM_PACK16 = 6,
74 B5G5R5A1_UNORM_PACK16 = 7,
75 A1R5G5B5_UNORM_PACK16 = 8,
76 R8_UNORM = 9,
77 R8_SNORM = 10,
78 R8_UINT = 13,
81 R8_SINT = 14,
82 R8_SRGB = 15,
83 R8G8_UNORM = 16,
84 R8G8_SNORM = 17,
85 R8G8_UINT = 20,
88 R8G8_SINT = 21,
89 R8G8_SRGB = 22,
90 R8G8B8_UNORM = 23,
91 R8G8B8_SNORM = 24,
92 R8G8B8_UINT = 27,
95 R8G8B8_SINT = 28,
96 R8G8B8_SRGB = 29,
97 B8G8R8_UNORM = 30,
98 B8G8R8_SNORM = 31,
99 B8G8R8_UINT = 34,
102 B8G8R8_SINT = 35,
103 B8G8R8_SRGB = 36,
104 R8G8B8A8_UNORM = 37,
105 R8G8B8A8_SNORM = 38,
106 R8G8B8A8_UINT = 41,
109 R8G8B8A8_SINT = 42,
110 R8G8B8A8_SRGB = 43,
111 B8G8R8A8_UNORM = 44,
112 B8G8R8A8_SNORM = 45,
113 B8G8R8A8_UINT = 48,
116 B8G8R8A8_SINT = 49,
117 B8G8R8A8_SRGB = 50,
118 A8B8G8R8_UNORM_PACK32 = 51,
119 A8B8G8R8_SNORM_PACK32 = 52,
120 A8B8G8R8_UINT_PACK32 = 55,
123 A8B8G8R8_SINT_PACK32 = 56,
124 A8B8G8R8_SRGB_PACK32 = 57,
125 A2R10G10B10_UNORM_PACK32 = 58,
126 A2R10G10B10_SNORM_PACK32 = 59,
127 A2R10G10B10_UINT_PACK32 = 62,
130 A2R10G10B10_SINT_PACK32 = 63,
131 A2B10G10R10_UNORM_PACK32 = 64,
132 A2B10G10R10_SNORM_PACK32 = 65,
133 A2B10G10R10_UINT_PACK32 = 68,
136 A2B10G10R10_SINT_PACK32 = 69,
137 R16_UNORM = 70,
138 R16_SNORM = 71,
139 R16_UINT = 74,
142 R16_SINT = 75,
143 R16_SFLOAT = 76,
144 R16G16_UNORM = 77,
145 R16G16_SNORM = 78,
146 R16G16_UINT = 81,
149 R16G16_SINT = 82,
150 R16G16_SFLOAT = 83,
151 R16G16B16_UNORM = 84,
152 R16G16B16_SNORM = 85,
153 R16G16B16_UINT = 88,
156 R16G16B16_SINT = 89,
157 R16G16B16_SFLOAT = 90,
158 R16G16B16A16_UNORM = 91,
159 R16G16B16A16_SNORM = 92,
160 R16G16B16A16_UINT = 95,
163 R16G16B16A16_SINT = 96,
164 R16G16B16A16_SFLOAT = 97,
165 R32_UINT = 98,
166 R32_SINT = 99,
167 R32_SFLOAT = 100,
168 R32G32_UINT = 101,
169 R32G32_SINT = 102,
170 R32G32_SFLOAT = 103,
171 R32G32B32_UINT = 104,
172 R32G32B32_SINT = 105,
173 R32G32B32_SFLOAT = 106,
174 R32G32B32A32_UINT = 107,
175 R32G32B32A32_SINT = 108,
176 R32G32B32A32_SFLOAT = 109,
177 R64_UINT = 110,
178 R64_SINT = 111,
179 R64_SFLOAT = 112,
180 R64G64_UINT = 113,
181 R64G64_SINT = 114,
182 R64G64_SFLOAT = 115,
183 R64G64B64_UINT = 116,
184 R64G64B64_SINT = 117,
185 R64G64B64_SFLOAT = 118,
186 R64G64B64A64_UINT = 119,
187 R64G64B64A64_SINT = 120,
188 R64G64B64A64_SFLOAT = 121,
189 B10G11R11_UFLOAT_PACK32 = 122,
190 E5B9G9R9_UFLOAT_PACK32 = 123,
191 D16_UNORM = 124,
192 X8_D24_UNORM_PACK32 = 125,
193 D32_SFLOAT = 126,
194 S8_UINT = 127,
195 D16_UNORM_S8_UINT = 128,
196 D24_UNORM_S8_UINT = 129,
197 D32_SFLOAT_S8_UINT = 130,
198 BC1_RGB_UNORM_BLOCK = 131,
199 BC1_RGB_SRGB_BLOCK = 132,
200 BC1_RGBA_UNORM_BLOCK = 133,
201 BC1_RGBA_SRGB_BLOCK = 134,
202 BC2_UNORM_BLOCK = 135,
203 BC2_SRGB_BLOCK = 136,
204 BC3_UNORM_BLOCK = 137,
205 BC3_SRGB_BLOCK = 138,
206 BC4_UNORM_BLOCK = 139,
207 BC4_SNORM_BLOCK = 140,
208 BC5_UNORM_BLOCK = 141,
209 BC5_SNORM_BLOCK = 142,
210 BC6H_UFLOAT_BLOCK = 143,
211 BC6H_SFLOAT_BLOCK = 144,
212 BC7_UNORM_BLOCK = 145,
213 BC7_SRGB_BLOCK = 146,
214 ETC2_R8G8B8_UNORM_BLOCK = 147,
215 ETC2_R8G8B8_SRGB_BLOCK = 148,
216 ETC2_R8G8B8A1_UNORM_BLOCK = 149,
217 ETC2_R8G8B8A1_SRGB_BLOCK = 150,
218 ETC2_R8G8B8A8_UNORM_BLOCK = 151,
219 ETC2_R8G8B8A8_SRGB_BLOCK = 152,
220 EAC_R11_UNORM_BLOCK = 153,
221 EAC_R11_SNORM_BLOCK = 154,
222 EAC_R11G11_UNORM_BLOCK = 155,
223 EAC_R11G11_SNORM_BLOCK = 156,
224 ASTC_4x4_UNORM_BLOCK = 157,
225 ASTC_4x4_SRGB_BLOCK = 158,
226 ASTC_5x4_UNORM_BLOCK = 159,
227 ASTC_5x4_SRGB_BLOCK = 160,
228 ASTC_5x5_UNORM_BLOCK = 161,
229 ASTC_5x5_SRGB_BLOCK = 162,
230 ASTC_6x5_UNORM_BLOCK = 163,
231 ASTC_6x5_SRGB_BLOCK = 164,
232 ASTC_6x6_UNORM_BLOCK = 165,
233 ASTC_6x6_SRGB_BLOCK = 166,
234 ASTC_8x5_UNORM_BLOCK = 167,
235 ASTC_8x5_SRGB_BLOCK = 168,
236 ASTC_8x6_UNORM_BLOCK = 169,
237 ASTC_8x6_SRGB_BLOCK = 170,
238 ASTC_8x8_UNORM_BLOCK = 171,
239 ASTC_8x8_SRGB_BLOCK = 172,
240 ASTC_10x5_UNORM_BLOCK = 173,
241 ASTC_10x5_SRGB_BLOCK = 174,
242 ASTC_10x6_UNORM_BLOCK = 175,
243 ASTC_10x6_SRGB_BLOCK = 176,
244 ASTC_10x8_UNORM_BLOCK = 177,
245 ASTC_10x8_SRGB_BLOCK = 178,
246 ASTC_10x10_UNORM_BLOCK = 179,
247 ASTC_10x10_SRGB_BLOCK = 180,
248 ASTC_12x10_UNORM_BLOCK = 181,
249 ASTC_12x10_SRGB_BLOCK = 182,
250 ASTC_12x12_UNORM_BLOCK = 183,
251 ASTC_12x12_SRGB_BLOCK = 184,
252 ASTC_4x4_SFLOAT_BLOCK = 1000066000,
253 ASTC_5x4_SFLOAT_BLOCK = 1000066001,
254 ASTC_5x5_SFLOAT_BLOCK = 1000066002,
255 ASTC_6x5_SFLOAT_BLOCK = 1000066003,
256 ASTC_6x6_SFLOAT_BLOCK = 1000066004,
257 ASTC_8x5_SFLOAT_BLOCK = 1000066005,
258 ASTC_8x6_SFLOAT_BLOCK = 1000066006,
259 ASTC_8x8_SFLOAT_BLOCK = 1000066007,
260 ASTC_10x5_SFLOAT_BLOCK = 1000066008,
261 ASTC_10x6_SFLOAT_BLOCK = 1000066009,
262 ASTC_10x8_SFLOAT_BLOCK = 1000066010,
263 ASTC_10x10_SFLOAT_BLOCK = 1000066011,
264 ASTC_12x10_SFLOAT_BLOCK = 1000066012,
265 ASTC_12x12_SFLOAT_BLOCK = 1000066013,
266 PVRTC1_2BPP_UNORM_BLOCK = 1000054000,
267 PVRTC1_4BPP_UNORM_BLOCK = 1000054001,
268 PVRTC2_2BPP_UNORM_BLOCK = 1000054002,
269 PVRTC2_4BPP_UNORM_BLOCK = 1000054003,
270 PVRTC1_2BPP_SRGB_BLOCK = 1000054004,
271 PVRTC1_4BPP_SRGB_BLOCK = 1000054005,
272 PVRTC2_2BPP_SRGB_BLOCK = 1000054006,
273 PVRTC2_4BPP_SRGB_BLOCK = 1000054007,
274 G8B8G8R8_422_UNORM = 1000156000,
275 B8G8R8G8_422_UNORM = 1000156001,
276 R10X6_UNORM_PACK16 = 1000156007,
278 R10X6G10X6_UNORM_2PACK16 = 1000156008,
279 R10X6G10X6B10X6A10X6_UNORM_4PACK16 = 1000156009,
280 G10X6B10X6G10X6R10X6_422_UNORM_4PACK16 = 1000156010,
281 B10X6G10X6R10X6G10X6_422_UNORM_4PACK16 = 1000156011,
282 R12X4_UNORM_PACK16 = 1000156017,
284 R12X4G12X4_UNORM_2PACK16 = 1000156018,
285 R12X4G12X4B12X4A12X4_UNORM_4PACK16 = 1000156019,
286 G12X4B12X4G12X4R12X4_422_UNORM_4PACK16 = 1000156020,
287 B12X4G12X4R12X4G12X4_422_UNORM_4PACK16 = 1000156021,
288 G16B16G16R16_422_UNORM = 1000156027,
290 B16G16R16G16_422_UNORM = 1000156028,
291 ASTC_3x3x3_UNORM_BLOCK = 1000288000,
294 ASTC_3x3x3_SRGB_BLOCK = 1000288001,
295 ASTC_3x3x3_SFLOAT_BLOCK = 1000288002,
296 ASTC_4x3x3_UNORM_BLOCK = 1000288003,
297 ASTC_4x3x3_SRGB_BLOCK = 1000288004,
298 ASTC_4x3x3_SFLOAT_BLOCK = 1000288005,
299 ASTC_4x4x3_UNORM_BLOCK = 1000288006,
300 ASTC_4x4x3_SRGB_BLOCK = 1000288007,
301 ASTC_4x4x3_SFLOAT_BLOCK = 1000288008,
302 ASTC_4x4x4_UNORM_BLOCK = 1000288009,
303 ASTC_4x4x4_SRGB_BLOCK = 1000288010,
304 ASTC_4x4x4_SFLOAT_BLOCK = 1000288011,
305 ASTC_5x4x4_UNORM_BLOCK = 1000288012,
306 ASTC_5x4x4_SRGB_BLOCK = 1000288013,
307 ASTC_5x4x4_SFLOAT_BLOCK = 1000288014,
308 ASTC_5x5x4_UNORM_BLOCK = 1000288015,
309 ASTC_5x5x4_SRGB_BLOCK = 1000288016,
310 ASTC_5x5x4_SFLOAT_BLOCK = 1000288017,
311 ASTC_5x5x5_UNORM_BLOCK = 1000288018,
312 ASTC_5x5x5_SRGB_BLOCK = 1000288019,
313 ASTC_5x5x5_SFLOAT_BLOCK = 1000288020,
314 ASTC_6x5x5_UNORM_BLOCK = 1000288021,
315 ASTC_6x5x5_SRGB_BLOCK = 1000288022,
316 ASTC_6x5x5_SFLOAT_BLOCK = 1000288023,
317 ASTC_6x6x5_UNORM_BLOCK = 1000288024,
318 ASTC_6x6x5_SRGB_BLOCK = 1000288025,
319 ASTC_6x6x5_SFLOAT_BLOCK = 1000288026,
320 ASTC_6x6x6_UNORM_BLOCK = 1000288027,
321 ASTC_6x6x6_SRGB_BLOCK = 1000288028,
322 ASTC_6x6x6_SFLOAT_BLOCK = 1000288029,
323 A4R4G4B4_UNORM_PACK16 = 1000340000,
324 A4B4G4R4_UNORM_PACK16 = 1000340001,
325 R16G16_SFIXED5 = 1000464000,
327 A1B5G5R5_UNORM_PACK16 = 1000470000,
328 A8_UNORM = 1000470001,
329 R10X6_UINT_PACK16 = 1000609000,
330 R10X6G10X6_UINT_2PACK16 = 1000609001,
331 R10X6G10X6B10X6A10X6_UINT_4PACK16 = 1000609002,
332 R12X4_UINT_PACK16 = 1000609003,
333 R12X4G12X4_UINT_2PACK16 = 1000609004,
334 R12X4G12X4B12X4A12X4_UINT_4PACK16 = 1000609005,
335 R14X2_UINT_PACK16 = 1000609006,
336 R14X2G14X2_UINT_2PACK16 = 1000609007,
337 R14X2G14X2B14X2A14X2_UINT_4PACK16 = 1000609008,
338 R14X2_UNORM_PACK16 = 1000609009,
339 R14X2G14X2_UNORM_2PACK16 = 1000609010,
340 R14X2G14X2B14X2A14X2_UNORM_4PACK16 = 1000609011,
341 }
344}
345
346pseudo_enum! {
347 NonZeroU32(u32) SupercompressionScheme {
354 BasisLZ = 1,
359 Zstandard = 2,
361 ZLIB = 3,
363 }
364}
365
366pseudo_enum! {
367 NonZeroU8(u8) ColorModel {
372 RGBSDA = 1,
373 YUVSDA = 2,
374 YIQSDA = 3,
375 LabSDA = 4,
376 CMYKA = 5,
377 XYZW = 6,
378 HSVAAng = 7,
379 HSLAAng = 8,
380 HSVAHex = 9,
381 HSLAHex = 10,
382 YCgCoA = 11,
383 YcCbcCrc = 12,
384 ICtCp = 13,
385 CIEXYZ = 14,
386 CIEXYY = 15,
387 BC1A = 128,
388 BC2 = 129,
389 BC3 = 130,
390 BC4 = 131,
391 BC5 = 132,
392 BC6H = 133,
393 BC7 = 134,
394 ETC1 = 160,
395 ETC2 = 161,
396 ASTC = 162,
397 ETC1S = 163,
398 PVRTC = 164,
399 PVRTC2 = 165,
400 UASTC = 166,
401 }
402}
403
404pseudo_enum! {
405 NonZeroU8(u8) ColorPrimaries {
410 BT709 = 1,
411 BT601EBU = 2,
412 BT601SMPTE = 3,
413 BT2020 = 4,
414 CIEXYZ = 5,
415 ACES = 6,
416 ACESCC = 7,
417 NTSC1953 = 8,
418 PAL525 = 9,
419 DISPLAYP3 = 10,
420 AdobeRGB = 11,
421 }
422}
423
424pseudo_enum! {
425 NonZeroU8(u8) TransferFunction {
430 Linear = 1,
431 SRGB = 2,
432 ITU = 3,
433 NTSC = 4,
434 SLOG = 5,
435 SLOG2 = 6,
436 BT1886 = 7,
437 HLGOETF = 8,
438 HLGEOTF = 9,
439 PQEOTF = 10,
440 PQOETF = 11,
441 DCIP3 = 12,
442 PALOETF = 13,
443 PAL625EOTF = 14,
444 ST240 = 15,
445 ACESCC = 16,
446 ACESCCT = 17,
447 AdobeRGB = 18,
448 }
449}