llama_cpp_bindings/
gguf_type.rs1#[repr(u32)]
5#[derive(Copy, Clone, Debug, PartialEq, Eq)]
6pub enum GgufType {
7 Uint8 = 0,
9 Int8 = 1,
11 Uint16 = 2,
13 Int16 = 3,
15 Uint32 = 4,
17 Int32 = 5,
19 Float32 = 6,
21 Bool = 7,
23 String = 8,
25 Array = 9,
27 Uint64 = 10,
29 Int64 = 11,
31 Float64 = 12,
33}
34
35impl GgufType {
36 #[must_use]
38 pub const fn from_raw(value: llama_cpp_bindings_sys::gguf_type) -> Option<Self> {
39 match value {
40 0 => Some(Self::Uint8),
41 1 => Some(Self::Int8),
42 2 => Some(Self::Uint16),
43 3 => Some(Self::Int16),
44 4 => Some(Self::Uint32),
45 5 => Some(Self::Int32),
46 6 => Some(Self::Float32),
47 7 => Some(Self::Bool),
48 8 => Some(Self::String),
49 9 => Some(Self::Array),
50 10 => Some(Self::Uint64),
51 11 => Some(Self::Int64),
52 12 => Some(Self::Float64),
53 _ => None,
54 }
55 }
56
57 #[must_use]
59 pub const fn to_raw(self) -> llama_cpp_bindings_sys::gguf_type {
60 self as llama_cpp_bindings_sys::gguf_type
61 }
62}
63
64#[cfg(test)]
65mod tests {
66 use super::GgufType;
67
68 #[test]
69 fn from_raw_maps_all_known_types() {
70 assert_eq!(GgufType::from_raw(0), Some(GgufType::Uint8));
71 assert_eq!(GgufType::from_raw(1), Some(GgufType::Int8));
72 assert_eq!(GgufType::from_raw(2), Some(GgufType::Uint16));
73 assert_eq!(GgufType::from_raw(3), Some(GgufType::Int16));
74 assert_eq!(GgufType::from_raw(4), Some(GgufType::Uint32));
75 assert_eq!(GgufType::from_raw(5), Some(GgufType::Int32));
76 assert_eq!(GgufType::from_raw(6), Some(GgufType::Float32));
77 assert_eq!(GgufType::from_raw(7), Some(GgufType::Bool));
78 assert_eq!(GgufType::from_raw(8), Some(GgufType::String));
79 assert_eq!(GgufType::from_raw(9), Some(GgufType::Array));
80 assert_eq!(GgufType::from_raw(10), Some(GgufType::Uint64));
81 assert_eq!(GgufType::from_raw(11), Some(GgufType::Int64));
82 assert_eq!(GgufType::from_raw(12), Some(GgufType::Float64));
83 }
84
85 #[test]
86 fn from_raw_returns_none_for_unknown() {
87 assert_eq!(GgufType::from_raw(99), None);
88 assert_eq!(GgufType::from_raw(u32::MAX), None);
89 }
90
91 #[test]
92 fn to_raw_roundtrips() {
93 for raw in 0..=12 {
94 let gguf_type = GgufType::from_raw(raw).unwrap();
95 assert_eq!(gguf_type.to_raw(), raw);
96 }
97 }
98}