From 9fd4f91bf95edb95f46358d7f1fb8164a40056ae Mon Sep 17 00:00:00 2001 From: Brad Hards Date: Thu, 2 Apr 2026 20:00:50 +1100 Subject: [PATCH] colr: make non-exhaustive, add unit tests --- src/moov/trak/mdia/minf/stbl/stsd/colr.rs | 41 +++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/src/moov/trak/mdia/minf/stbl/stsd/colr.rs b/src/moov/trak/mdia/minf/stbl/stsd/colr.rs index ae52e7c..55ce068 100644 --- a/src/moov/trak/mdia/minf/stbl/stsd/colr.rs +++ b/src/moov/trak/mdia/minf/stbl/stsd/colr.rs @@ -2,6 +2,7 @@ use crate::*; #[derive(Debug, Clone, PartialEq, Eq)] #[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +#[non_exhaustive] pub enum Colr { Nclx { colour_primaries: u16, @@ -183,4 +184,44 @@ mod tests { assert_eq!(buf.as_slice(), ENCODED); } + + #[test] + fn test_nclc_decode() { + const ENCODED: &[u8] = &[ + 0x00, 0x00, 0x00, 0x12, 0x63, 0x6f, 0x6c, 0x72, 0x6e, 0x63, 0x6c, 0x63, 0x00, 0x01, + 0x00, 0x0d, 0x00, 0x06, + ]; + + let buf = &mut std::io::Cursor::new(&ENCODED); + + let colr = Colr::decode(buf).expect("failed to decode colr"); + + assert_eq!( + colr, + Colr::Nclc { + colour_primaries: 1, + transfer_characteristics: 13, + matrix_coefficients: 6, + } + ); + } + + #[test] + fn test_nclc_encode() { + const ENCODED: &[u8] = &[ + 0x00, 0x00, 0x00, 0x12, 0x63, 0x6f, 0x6c, 0x72, 0x6e, 0x63, 0x6c, 0x63, 0x00, 0x01, + 0x00, 0x0d, 0x00, 0x06, + ]; + + let colr = Colr::Nclc { + colour_primaries: 1, + transfer_characteristics: 13, + matrix_coefficients: 6, + }; + + let mut buf = Vec::new(); + colr.encode(&mut buf).unwrap(); + + assert_eq!(buf.as_slice(), ENCODED); + } }