stfs 0.1.0

Parser for Xbox 360 STFS (Secure Transacted File System) packages
Documentation
pub mod fixed {
	use serde::de;
	use serde::Deserializer;
	use serde::Serializer;

	pub fn serialize<const N: usize, S: Serializer>(bytes: &[u8; N], s: S) -> Result<S::Ok, S::Error> {
		let hex: String = bytes.iter().map(|b| format!("{:02x}", b)).collect();
		s.serialize_str(&hex)
	}

	pub fn deserialize<'de, const N: usize, D: Deserializer<'de>>(d: D) -> Result<[u8; N], D::Error> {
		let s: &str = de::Deserialize::deserialize(d)?;
		if s.len() != N * 2 {
			return Err(de::Error::custom(format!("expected {} hex chars, got {}", N * 2, s.len())));
		}
		let mut arr = [0u8; N];
		for (i, byte) in arr.iter_mut().enumerate() {
			*byte = u8::from_str_radix(&s[i * 2..i * 2 + 2], 16).map_err(de::Error::custom)?;
		}
		Ok(arr)
	}
}