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