qubit_value/multi_values/
multi_values_setter.rs1use crate::value_error::ValueResult;
13use std::collections::HashMap;
14use std::time::Duration;
15
16use bigdecimal::BigDecimal;
17use chrono::{
18 DateTime,
19 NaiveDate,
20 NaiveDateTime,
21 NaiveTime,
22 Utc,
23};
24use num_bigint::BigInt;
25use url::Url;
26
27use super::multi_values::MultiValues;
28
29pub trait MultiValuesSetter<T>: super::sealed::MultiValuesSetterSealed<T> {
34 fn set_values(&mut self, values: Vec<T>) -> ValueResult<()>;
41}
42
43macro_rules! impl_multi_values_setter {
44 ($type:ty, $variant:ident) => {
45 impl super::sealed::MultiValuesSetterSealed<$type> for MultiValues {}
46
47 impl MultiValuesSetter<$type> for MultiValues {
48 #[inline]
49 fn set_values(&mut self, values: Vec<$type>) -> ValueResult<()> {
50 *self = MultiValues::$variant(values);
51 Ok(())
52 }
53 }
54 };
55}
56
57impl_multi_values_setter!(bool, Bool);
58impl_multi_values_setter!(char, Char);
59impl_multi_values_setter!(i8, Int8);
60impl_multi_values_setter!(i16, Int16);
61impl_multi_values_setter!(i32, Int32);
62impl_multi_values_setter!(i64, Int64);
63impl_multi_values_setter!(i128, Int128);
64impl_multi_values_setter!(u8, UInt8);
65impl_multi_values_setter!(u16, UInt16);
66impl_multi_values_setter!(u32, UInt32);
67impl_multi_values_setter!(u64, UInt64);
68impl_multi_values_setter!(u128, UInt128);
69impl_multi_values_setter!(isize, IntSize);
70impl_multi_values_setter!(usize, UIntSize);
71impl_multi_values_setter!(f32, Float32);
72impl_multi_values_setter!(f64, Float64);
73impl_multi_values_setter!(String, String);
74impl_multi_values_setter!(NaiveDate, Date);
75impl_multi_values_setter!(NaiveTime, Time);
76impl_multi_values_setter!(NaiveDateTime, DateTime);
77impl_multi_values_setter!(DateTime<Utc>, Instant);
78impl_multi_values_setter!(BigInt, BigInteger);
79impl_multi_values_setter!(BigDecimal, BigDecimal);
80impl_multi_values_setter!(Duration, Duration);
81impl_multi_values_setter!(Url, Url);
82impl_multi_values_setter!(HashMap<String, String>, StringMap);
83impl_multi_values_setter!(serde_json::Value, Json);