reifydb_value/config/
mod.rs1use std::collections::HashMap;
5
6use crate::value::{
7 Value,
8 try_from::{TryFromValue, TryFromValueCoerce},
9};
10
11pub mod bool;
12pub mod date;
13pub mod datetime;
14pub mod decimal;
15pub mod dictionary;
16pub mod duration;
17pub mod f32;
18pub mod f64;
19pub mod i128;
20pub mod i16;
21pub mod i32;
22pub mod i64;
23pub mod i8;
24pub mod identity;
25pub mod string;
26pub mod time;
27pub mod u128;
28pub mod u16;
29pub mod u32;
30pub mod u64;
31pub mod u8;
32pub mod usize;
33
34#[derive(Debug, Clone)]
35pub struct ExtensionParams {
36 name: String,
37 values: HashMap<String, Value>,
38}
39
40impl ExtensionParams {
41 pub fn new(name: impl Into<String>, values: HashMap<String, Value>) -> Self {
42 Self {
43 name: name.into(),
44 values,
45 }
46 }
47
48 pub fn name(&self) -> &str {
49 &self.name
50 }
51
52 pub fn get(&self, key: &str) -> Option<&Value> {
53 self.values.get(key)
54 }
55
56 pub fn contains(&self, key: &str) -> bool {
57 self.values.contains_key(key)
58 }
59
60 pub fn iter(&self) -> impl Iterator<Item = (&String, &Value)> {
61 self.values.iter()
62 }
63
64 fn opt<T: TryFromValue>(&self, key: &str) -> Option<T> {
65 self.values.get(key).and_then(T::from_value)
66 }
67
68 fn opt_coerce<T: TryFromValueCoerce>(&self, key: &str) -> Option<T> {
69 self.values.get(key).and_then(T::from_value_coerce)
70 }
71
72 fn missing(&self, key: &str, expected: &str) -> ! {
73 panic!("{}: required param '{}' is missing or not {}", self.name, key, expected)
74 }
75}
76
77#[cfg(test)]
78pub(super) mod testutil {
79 use std::collections::HashMap;
80
81 use super::ExtensionParams;
82 use crate::value::Value;
83
84 pub fn config(pairs: Vec<(&str, Value)>) -> ExtensionParams {
85 let values: HashMap<String, Value> = pairs.into_iter().map(|(k, v)| (k.to_string(), v)).collect();
86 ExtensionParams::new("test_op", values)
87 }
88}