[−][src]Crate four_cc
Newtype wrapper providing a convenient representation of four-character-code values.
Using this type in a public APIs as an alternative to simply passing the equivalent u32
makes the value's expected use explicit.
Creating a FourCC value
use four_cc::FourCC; let uuid = FourCC(*b"uuid");
From a slice
let data = b"moofftyp"; let code = FourCC::from(&data[0..4]); // would panic if fewer than 4 bytes assert_eq!(FourCC(*b"moof"), code);
Constants
FourCC values can be used in const expressions
const UUID: FourCC = FourCC(*b"uuid");
Matching
You can use FourCC values in match patterns as long as you define constants to match against,
const UUID: FourCC = FourCC(*b"uuid"); const MOOV: FourCC = FourCC(*b"moov"); match other_value { MOOV => println!("movie"), UUID => println!("unique identifier"), // compiler will not accept: FourCC(*b"trun") => println!("track fragment run"), _ => println!("Other value; scary stuff") }
Invalid literal values
If the literal has other than four bytes, compilation will fail
ⓘThis example deliberately fails to compile
let bad_fourcc = FourCC(*b"uuid123"); // -> expected an array with a fixed size of 4 elements, found one with 7 elements
Note the FourCC value may contain non-printable byte values, including the byte-value zero.
Debug display
let uuid = FourCC(*b"uuid"); println!("it's {:?}", uuid); // produces: it's FourCC{uuid}
Note that if the FourCC bytes are not able to be converted to UTF8, then a fallback
representation will be used (as it would be suprising for format!()
to panic).
let uuid = FourCC(*b"u\xFFi\0"); println!("it's {:?}", uuid); // produces: it's FourCC{u\xffi\x00}
Structs
FourCC | A four-character-code value. |