llama_cpp_bindings/model/params/
kv_override_value_iterator.rs1use std::ffi::{CStr, CString};
2use std::fmt::Debug;
3
4use crate::model::params::LlamaModelParams;
5use crate::model::params::param_override_value::ParamOverrideValue;
6
7#[derive(Debug)]
9pub struct KvOverrideValueIterator<'model_params> {
10 model_params: &'model_params LlamaModelParams,
11 current: usize,
12}
13
14impl<'model_params> KvOverrideValueIterator<'model_params> {
15 #[must_use]
16 pub const fn new(model_params: &'model_params LlamaModelParams) -> Self {
17 Self {
18 model_params,
19 current: 0,
20 }
21 }
22}
23
24impl Iterator for KvOverrideValueIterator<'_> {
25 type Item = (CString, ParamOverrideValue);
26
27 fn next(&mut self) -> Option<Self::Item> {
28 let overrides = self.model_params.params.kv_overrides;
29
30 if overrides.is_null() {
31 return None;
32 }
33
34 loop {
35 let current = unsafe { *overrides.add(self.current) };
39
40 if current.key[0] == 0 {
41 return None;
42 }
43
44 self.current += 1;
45
46 if let Ok(value) = ParamOverrideValue::try_from(¤t) {
47 let key = unsafe { CStr::from_ptr(current.key.as_ptr()).to_owned() };
48
49 return Some((key, value));
50 }
51 }
52 }
53}