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