rakata_core/
language_id.rs1use std::fmt::{Display, Formatter};
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord, Default)]
8#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
9#[cfg_attr(feature = "serde", serde(transparent))]
10pub struct LanguageId(u32);
11
12impl LanguageId {
13 pub const fn from_raw(raw: u32) -> Self {
15 Self(raw)
16 }
17
18 pub const fn raw(self) -> u32 {
20 self.0
21 }
22}
23
24impl From<u32> for LanguageId {
25 fn from(value: u32) -> Self {
26 Self::from_raw(value)
27 }
28}
29
30impl From<LanguageId> for u32 {
31 fn from(value: LanguageId) -> Self {
32 value.raw()
33 }
34}
35
36impl Display for LanguageId {
37 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
38 write!(f, "{}", self.0)
39 }
40}
41
42#[cfg(test)]
43mod tests {
44 use super::*;
45
46 #[test]
47 fn raw_roundtrip_is_lossless() {
48 let language_id = LanguageId::from_raw(131);
49 assert_eq!(language_id.raw(), 131);
50 }
51}