qubit_value/multi_values/
multi_values_set_arg.rs1use super::multi_values::MultiValues;
14use crate::value_error::ValueResult;
15use std::collections::HashMap;
16use std::time::Duration;
17
18use bigdecimal::BigDecimal;
19use chrono::{
20 DateTime,
21 NaiveDate,
22 NaiveDateTime,
23 NaiveTime,
24 Utc,
25};
26use num_bigint::BigInt;
27use url::Url;
28
29use super::multi_values_setter::MultiValuesSetter;
30use super::multi_values_setter_slice::MultiValuesSetterSlice;
31use super::multi_values_single_setter::MultiValuesSingleSetter;
32
33pub trait MultiValuesSetArg<'a>: super::sealed::MultiValuesSetArgSealed {
37 type Item: 'a + Clone;
39
40 fn apply(self, target: &mut MultiValues) -> ValueResult<()>;
47}
48
49macro_rules! impl_multi_values_set_arg {
50 ($type:ty) => {
51 impl super::sealed::MultiValuesSetArgSealed for Vec<$type> {}
52
53 impl<'a> MultiValuesSetArg<'a> for Vec<$type> {
54 type Item = $type;
55
56 #[inline]
57 fn apply(self, target: &mut MultiValues) -> ValueResult<()> {
58 <MultiValues as MultiValuesSetter<$type>>::set_values(target, self)
59 }
60 }
61
62 impl<'a> super::sealed::MultiValuesSetArgSealed for &'a [$type] {}
63
64 impl<'a> MultiValuesSetArg<'a> for &'a [$type]
65 where
66 $type: Clone,
67 {
68 type Item = $type;
69
70 #[inline]
71 fn apply(self, target: &mut MultiValues) -> ValueResult<()> {
72 <MultiValues as MultiValuesSetterSlice<$type>>::set_values_slice(target, self)
73 }
74 }
75
76 impl<'a> super::sealed::MultiValuesSetArgSealed for &'a Vec<$type> {}
77
78 impl<'a> MultiValuesSetArg<'a> for &'a Vec<$type>
79 where
80 $type: Clone,
81 {
82 type Item = $type;
83
84 #[inline]
85 fn apply(self, target: &mut MultiValues) -> ValueResult<()> {
86 <MultiValues as MultiValuesSetterSlice<$type>>::set_values_slice(
87 target,
88 self.as_slice(),
89 )
90 }
91 }
92
93 impl<const N: usize> super::sealed::MultiValuesSetArgSealed for [$type; N] {}
94
95 impl<'a, const N: usize> MultiValuesSetArg<'a> for [$type; N] {
96 type Item = $type;
97
98 #[inline]
99 fn apply(self, target: &mut MultiValues) -> ValueResult<()> {
100 <MultiValues as MultiValuesSetter<$type>>::set_values(target, Vec::from(self))
101 }
102 }
103
104 impl<'a, const N: usize> super::sealed::MultiValuesSetArgSealed for &'a [$type; N] {}
105
106 impl<'a, const N: usize> MultiValuesSetArg<'a> for &'a [$type; N]
107 where
108 $type: Clone,
109 {
110 type Item = $type;
111
112 #[inline]
113 fn apply(self, target: &mut MultiValues) -> ValueResult<()> {
114 <MultiValues as MultiValuesSetterSlice<$type>>::set_values_slice(
115 target,
116 self.as_slice(),
117 )
118 }
119 }
120
121 impl super::sealed::MultiValuesSetArgSealed for $type {}
122
123 impl<'a> MultiValuesSetArg<'a> for $type {
124 type Item = $type;
125
126 #[inline]
127 fn apply(self, target: &mut MultiValues) -> ValueResult<()> {
128 <MultiValues as MultiValuesSingleSetter<$type>>::set_single_value(target, self)
129 }
130 }
131 };
132}
133
134impl_multi_values_set_arg!(bool);
135impl_multi_values_set_arg!(char);
136impl_multi_values_set_arg!(i8);
137impl_multi_values_set_arg!(i16);
138impl_multi_values_set_arg!(i32);
139impl_multi_values_set_arg!(i64);
140impl_multi_values_set_arg!(i128);
141impl_multi_values_set_arg!(u8);
142impl_multi_values_set_arg!(u16);
143impl_multi_values_set_arg!(u32);
144impl_multi_values_set_arg!(u64);
145impl_multi_values_set_arg!(u128);
146impl_multi_values_set_arg!(isize);
147impl_multi_values_set_arg!(usize);
148impl_multi_values_set_arg!(f32);
149impl_multi_values_set_arg!(f64);
150impl_multi_values_set_arg!(String);
151impl_multi_values_set_arg!(NaiveDate);
152impl_multi_values_set_arg!(NaiveTime);
153impl_multi_values_set_arg!(NaiveDateTime);
154impl_multi_values_set_arg!(DateTime<Utc>);
155impl_multi_values_set_arg!(BigInt);
156impl_multi_values_set_arg!(BigDecimal);
157impl_multi_values_set_arg!(Duration);
158impl_multi_values_set_arg!(Url);
159impl_multi_values_set_arg!(HashMap<String, String>);
160impl_multi_values_set_arg!(serde_json::Value);
161
162impl super::sealed::MultiValuesSetArgSealed for &str {}
163
164impl MultiValuesSetArg<'_> for &str {
165 type Item = String;
166
167 #[inline]
168 fn apply(self, target: &mut MultiValues) -> ValueResult<()> {
169 <MultiValues as MultiValuesSingleSetter<String>>::set_single_value(target, self.to_string())
170 }
171}
172
173impl super::sealed::MultiValuesSetArgSealed for Vec<&str> {}
174
175impl MultiValuesSetArg<'_> for Vec<&str> {
176 type Item = String;
177
178 #[inline]
179 fn apply(self, target: &mut MultiValues) -> ValueResult<()> {
180 let owned: Vec<String> = self.into_iter().map(|s| s.to_string()).collect();
181 <MultiValues as MultiValuesSetter<String>>::set_values(target, owned)
182 }
183}
184
185impl<'b> super::sealed::MultiValuesSetArgSealed for &'b [&'b str] {}
186
187impl<'b> MultiValuesSetArg<'b> for &'b [&'b str] {
188 type Item = String;
189
190 #[inline]
191 fn apply(self, target: &mut MultiValues) -> ValueResult<()> {
192 let owned: Vec<String> = self.iter().map(|s| (*s).to_string()).collect();
193 <MultiValues as MultiValuesSetter<String>>::set_values(target, owned)
194 }
195}
196
197impl super::sealed::MultiValuesSetArgSealed for &Vec<&str> {}
198
199impl MultiValuesSetArg<'_> for &Vec<&str> {
200 type Item = String;
201
202 #[inline]
203 fn apply(self, target: &mut MultiValues) -> ValueResult<()> {
204 let owned: Vec<String> = self.iter().map(|s| (*s).to_string()).collect();
205 <MultiValues as MultiValuesSetter<String>>::set_values(target, owned)
206 }
207}
208
209impl<const N: usize> super::sealed::MultiValuesSetArgSealed for [&str; N] {}
210
211impl<const N: usize> MultiValuesSetArg<'_> for [&str; N] {
212 type Item = String;
213
214 #[inline]
215 fn apply(self, target: &mut MultiValues) -> ValueResult<()> {
216 let owned: Vec<String> = self.into_iter().map(str::to_string).collect();
217 <MultiValues as MultiValuesSetter<String>>::set_values(target, owned)
218 }
219}
220
221impl<const N: usize> super::sealed::MultiValuesSetArgSealed for &[&str; N] {}
222
223impl<const N: usize> MultiValuesSetArg<'_> for &[&str; N] {
224 type Item = String;
225
226 #[inline]
227 fn apply(self, target: &mut MultiValues) -> ValueResult<()> {
228 let owned: Vec<String> = self.iter().map(|s| (*s).to_string()).collect();
229 <MultiValues as MultiValuesSetter<String>>::set_values(target, owned)
230 }
231}