Skip to main content

llama_cpp_bindings/
gguf_type.rs

1#[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}