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)]
8pub struct KvOverrideValueIterator<'model_params> {
9 model_params: &'model_params LlamaModelParams,
10 current: usize,
11}
12
13impl<'model_params> KvOverrideValueIterator<'model_params> {
14 #[must_use]
15 pub const fn new(model_params: &'model_params LlamaModelParams) -> Self {
16 Self {
17 model_params,
18 current: 0,
19 }
20 }
21}
22
23impl Iterator for KvOverrideValueIterator<'_> {
24 type Item = (CString, ParamOverrideValue);
25
26 fn next(&mut self) -> Option<Self::Item> {
27 let overrides = self.model_params.params.kv_overrides;
28
29 if overrides.is_null() {
30 return None;
31 }
32
33 loop {
34 let current = unsafe { *overrides.add(self.current) };
36
37 if current.key[0] == 0 {
38 return None;
39 }
40
41 self.current += 1;
42
43 if let Ok(value) = ParamOverrideValue::try_from(¤t) {
44 let key = unsafe { CStr::from_ptr(current.key.as_ptr()).to_owned() };
45
46 return Some((key, value));
47 }
48 }
49 }
50}