Skip to main content

qubit_value/multi_values/
multi_values_setters.rs

1/*******************************************************************************
2 *
3 *    Copyright (c) 2025 - 2026 Haixing Hu.
4 *
5 *    SPDX-License-Identifier: Apache-2.0
6 *
7 *    Licensed under the Apache License, Version 2.0.
8 *
9 ******************************************************************************/
10
11//! Type-specific replacement accessors for `MultiValues`.
12
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 crate::value_error::ValueResult;
28
29use super::multi_values::MultiValues;
30
31impl MultiValues {
32    // ========================================================================
33    // Set value operations
34    // ========================================================================
35
36    impl_set_multi_values! {
37        /// Set all boolean values
38        ///
39        /// # Parameters
40        ///
41        /// * `values` - The list of boolean values to set
42        ///
43        /// # Returns
44        ///
45        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
46        ///
47        /// # Example
48        ///
49        /// ```rust
50        /// use qubit_datatype::DataType;
51        /// use qubit_value::MultiValues;
52        ///
53        /// let mut values = MultiValues::Empty(DataType::Bool);
54        /// values.set_bools(vec![true, false, true]).unwrap();
55        /// assert_eq!(values.get_bools().unwrap(), &[true, false, true]);
56        /// ```
57        set_bools, Bool, bool, DataType::Bool
58    }
59
60    impl_set_multi_values! {
61        /// Set all character values
62        ///
63        /// # Parameters
64        ///
65        /// * `values` - The list of character values to set
66        ///
67        /// # Returns
68        ///
69        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
70        set_chars, Char, char, DataType::Char
71    }
72
73    impl_set_multi_values! {
74        /// Set all int8 values
75        ///
76        /// # Parameters
77        ///
78        /// * `values` - The list of int8 values to set
79        ///
80        /// # Returns
81        ///
82        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
83        set_int8s, Int8, i8, DataType::Int8
84    }
85
86    impl_set_multi_values! {
87        /// Set all int16 values
88        ///
89        /// # Parameters
90        ///
91        /// * `values` - The list of int16 values to set
92        ///
93        /// # Returns
94        ///
95        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
96        set_int16s, Int16, i16, DataType::Int16
97    }
98
99    impl_set_multi_values! {
100        /// Set all int32 values
101        ///
102        /// # Parameters
103        ///
104        /// * `values` - The list of int32 values to set
105        ///
106        /// # Returns
107        ///
108        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
109        set_int32s, Int32, i32, DataType::Int32
110    }
111
112    impl_set_multi_values! {
113        /// Set all int64 values
114        ///
115        /// # Parameters
116        ///
117        /// * `values` - The list of int64 values to set
118        ///
119        /// # Returns
120        ///
121        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
122        set_int64s, Int64, i64, DataType::Int64
123    }
124
125    impl_set_multi_values! {
126        /// Set all int128 values
127        ///
128        /// # Parameters
129        ///
130        /// * `values` - The list of int128 values to set
131        ///
132        /// # Returns
133        ///
134        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
135        set_int128s, Int128, i128, DataType::Int128
136    }
137
138    impl_set_multi_values! {
139        /// Set all uint8 values
140        ///
141        /// # Parameters
142        ///
143        /// * `values` - The list of uint8 values to set
144        ///
145        /// # Returns
146        ///
147        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
148        set_uint8s, UInt8, u8, DataType::UInt8
149    }
150
151    impl_set_multi_values! {
152        /// Set all uint16 values
153        ///
154        /// # Parameters
155        ///
156        /// * `values` - The list of uint16 values to set
157        ///
158        /// # Returns
159        ///
160        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
161        set_uint16s, UInt16, u16, DataType::UInt16
162    }
163
164    impl_set_multi_values! {
165        /// Set all uint32 values
166        ///
167        /// # Parameters
168        ///
169        /// * `values` - The list of uint32 values to set
170        ///
171        /// # Returns
172        ///
173        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
174        set_uint32s, UInt32, u32, DataType::UInt32
175    }
176
177    impl_set_multi_values! {
178        /// Set all uint64 values
179        ///
180        /// # Parameters
181        ///
182        /// * `values` - The list of uint64 values to set
183        ///
184        /// # Returns
185        ///
186        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
187        set_uint64s, UInt64, u64, DataType::UInt64
188    }
189
190    impl_set_multi_values! {
191        /// Set all uint128 values
192        ///
193        /// # Parameters
194        ///
195        /// * `values` - The list of uint128 values to set
196        ///
197        /// # Returns
198        ///
199        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
200        set_uint128s, UInt128, u128, DataType::UInt128
201    }
202
203    impl_set_multi_values! {
204        /// Set all float32 values
205        ///
206        /// # Parameters
207        ///
208        /// * `values` - The list of float32 values to set
209        ///
210        /// # Returns
211        ///
212        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
213        set_float32s, Float32, f32, DataType::Float32
214    }
215
216    impl_set_multi_values! {
217        /// Set all float64 values
218        ///
219        /// # Parameters
220        ///
221        /// * `values` - The list of float64 values to set
222        ///
223        /// # Returns
224        ///
225        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
226        set_float64s, Float64, f64, DataType::Float64
227    }
228
229    impl_set_multi_values! {
230        /// Set all string values
231        ///
232        /// # Parameters
233        ///
234        /// * `values` - The list of string values to set
235        ///
236        /// # Returns
237        ///
238        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
239        ///
240        /// # Example
241        ///
242        /// ```rust
243        /// use qubit_datatype::DataType;
244        /// use qubit_value::MultiValues;
245        ///
246        /// let mut values = MultiValues::Empty(DataType::String);
247        /// values.set_strings(vec!["hello".to_string(), "world".to_string()]).unwrap();
248        /// assert_eq!(values.get_strings().unwrap(), &["hello", "world"]);
249        /// ```
250        set_strings, String, String, DataType::String
251    }
252
253    impl_set_multi_values! {
254        /// Set all date values
255        ///
256        /// # Parameters
257        ///
258        /// * `values` - The list of date values to set
259        ///
260        /// # Returns
261        ///
262        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
263        set_dates, Date, NaiveDate, DataType::Date
264    }
265
266    impl_set_multi_values! {
267        /// Set all time values
268        ///
269        /// # Parameters
270        ///
271        /// * `values` - The list of time values to set
272        ///
273        /// # Returns
274        ///
275        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
276        set_times, Time, NaiveTime, DataType::Time
277    }
278
279    impl_set_multi_values! {
280        /// Set all datetime values
281        ///
282        /// # Parameters
283        ///
284        /// * `values` - The list of datetime values to set
285        ///
286        /// # Returns
287        ///
288        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
289        set_datetimes, DateTime, NaiveDateTime, DataType::DateTime
290    }
291
292    impl_set_multi_values! {
293        /// Set all UTC instant values
294        ///
295        /// # Parameters
296        ///
297        /// * `values` - The list of UTC instant values to set
298        ///
299        /// # Returns
300        ///
301        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
302        set_instants, Instant, DateTime<Utc>, DataType::Instant
303    }
304
305    impl_set_multi_values! {
306        /// Set all big integer values
307        ///
308        /// # Parameters
309        ///
310        /// * `values` - The list of big integer values to set
311        ///
312        /// # Returns
313        ///
314        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
315        set_bigintegers, BigInteger, BigInt, DataType::BigInteger
316    }
317
318    impl_set_multi_values! {
319        /// Set all big decimal values
320        ///
321        /// # Parameters
322        ///
323        /// * `values` - The list of big decimal values to set
324        ///
325        /// # Returns
326        ///
327        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
328        set_bigdecimals, BigDecimal, BigDecimal, DataType::BigDecimal
329    }
330
331    impl_set_multi_values! {
332        /// Set all isize values
333        set_intsizes, IntSize, isize, DataType::IntSize
334    }
335
336    impl_set_multi_values! {
337        /// Set all usize values
338        set_uintsizes, UIntSize, usize, DataType::UIntSize
339    }
340
341    impl_set_multi_values! {
342        /// Set all Duration values
343        set_durations, Duration, Duration, DataType::Duration
344    }
345
346    impl_set_multi_values! {
347        /// Set all Url values
348        set_urls, Url, Url, DataType::Url
349    }
350
351    impl_set_multi_values! {
352        /// Set all StringMap values
353        set_string_maps, StringMap, HashMap<String, String>, DataType::StringMap
354    }
355
356    impl_set_multi_values! {
357        /// Set all Json values
358        set_jsons, Json, serde_json::Value, DataType::Json
359    }
360
361    // ========================================================================
362    // Set all values via slice operations
363    // ========================================================================
364
365    impl_set_multi_values_slice! {
366        /// Set all boolean values via slice
367        ///
368        /// # Parameters
369        ///
370        /// * `values` - The boolean value slice to set
371        ///
372        /// # Returns
373        ///
374        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
375        set_bools_slice, Bool, bool, DataType::Bool
376    }
377
378    impl_set_multi_values_slice! {
379        /// Set all character values via slice
380        ///
381        /// # Parameters
382        ///
383        /// * `values` - The character value slice to set
384        ///
385        /// # Returns
386        ///
387        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
388        set_chars_slice, Char, char, DataType::Char
389    }
390
391    impl_set_multi_values_slice! {
392        /// Set all int8 values via slice
393        ///
394        /// # Parameters
395        ///
396        /// * `values` - The int8 value slice to set
397        ///
398        /// # Returns
399        ///
400        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
401        set_int8s_slice, Int8, i8, DataType::Int8
402    }
403
404    impl_set_multi_values_slice! {
405        /// Set all int16 values via slice
406        ///
407        /// # Parameters
408        ///
409        /// * `values` - The int16 value slice to set
410        ///
411        /// # Returns
412        ///
413        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
414        set_int16s_slice, Int16, i16, DataType::Int16
415    }
416
417    impl_set_multi_values_slice! {
418        /// Set all int32 values via slice
419        ///
420        /// # Parameters
421        ///
422        /// * `values` - The int32 value slice to set
423        ///
424        /// # Returns
425        ///
426        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
427        set_int32s_slice, Int32, i32, DataType::Int32
428    }
429
430    impl_set_multi_values_slice! {
431        /// Set all int64 values via slice
432        ///
433        /// # Parameters
434        ///
435        /// * `values` - The int64 value slice to set
436        ///
437        /// # Returns
438        ///
439        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
440        set_int64s_slice, Int64, i64, DataType::Int64
441    }
442
443    impl_set_multi_values_slice! {
444        /// Set all int128 values via slice
445        ///
446        /// # Parameters
447        ///
448        /// * `values` - The int128 value slice to set
449        ///
450        /// # Returns
451        ///
452        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
453        set_int128s_slice, Int128, i128, DataType::Int128
454    }
455
456    impl_set_multi_values_slice! {
457        /// Set all uint8 values via slice
458        ///
459        /// # Parameters
460        ///
461        /// * `values` - The uint8 value slice to set
462        ///
463        /// # Returns
464        ///
465        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
466        set_uint8s_slice, UInt8, u8, DataType::UInt8
467    }
468
469    impl_set_multi_values_slice! {
470        /// Set all uint16 values via slice
471        ///
472        /// # Parameters
473        ///
474        /// * `values` - The uint16 value slice to set
475        ///
476        /// # Returns
477        ///
478        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
479        set_uint16s_slice, UInt16, u16, DataType::UInt16
480    }
481
482    impl_set_multi_values_slice! {
483        /// Set all uint32 values via slice
484        ///
485        /// # Parameters
486        ///
487        /// * `values` - The uint32 value slice to set
488        ///
489        /// # Returns
490        ///
491        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
492        set_uint32s_slice, UInt32, u32, DataType::UInt32
493    }
494
495    impl_set_multi_values_slice! {
496        /// Set all uint64 values via slice
497        ///
498        /// # Parameters
499        ///
500        /// * `values` - The uint64 value slice to set
501        ///
502        /// # Returns
503        ///
504        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
505        set_uint64s_slice, UInt64, u64, DataType::UInt64
506    }
507
508    impl_set_multi_values_slice! {
509        /// Set all uint128 values via slice
510        ///
511        /// # Parameters
512        ///
513        /// * `values` - The uint128 value slice to set
514        ///
515        /// # Returns
516        ///
517        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
518        set_uint128s_slice, UInt128, u128, DataType::UInt128
519    }
520
521    impl_set_multi_values_slice! {
522        /// Set all float32 values via slice
523        ///
524        /// # Parameters
525        ///
526        /// * `values` - The float32 value slice to set
527        ///
528        /// # Returns
529        ///
530        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
531        set_float32s_slice, Float32, f32, DataType::Float32
532    }
533
534    impl_set_multi_values_slice! {
535        /// Set all float64 values via slice
536        ///
537        /// # Parameters
538        ///
539        /// * `values` - The float64 value slice to set
540        ///
541        /// # Returns
542        ///
543        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
544        set_float64s_slice, Float64, f64, DataType::Float64
545    }
546
547    impl_set_multi_values_slice! {
548        /// Set all string values via slice
549        ///
550        /// # Parameters
551        ///
552        /// * `values` - The string value slice to set
553        ///
554        /// # Returns
555        ///
556        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
557        set_strings_slice, String, String, DataType::String
558    }
559
560    impl_set_multi_values_slice! {
561        /// Set all date values via slice
562        ///
563        /// # Parameters
564        ///
565        /// * `values` - The date value slice to set
566        ///
567        /// # Returns
568        ///
569        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
570        set_dates_slice, Date, NaiveDate, DataType::Date
571    }
572
573    impl_set_multi_values_slice! {
574        /// Set all time values via slice
575        ///
576        /// # Parameters
577        ///
578        /// * `values` - The time value slice to set
579        ///
580        /// # Returns
581        ///
582        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
583        set_times_slice, Time, NaiveTime, DataType::Time
584    }
585
586    impl_set_multi_values_slice! {
587        /// Set all datetime values via slice
588        ///
589        /// # Parameters
590        ///
591        /// * `values` - The datetime value slice to set
592        ///
593        /// # Returns
594        ///
595        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
596        set_datetimes_slice, DateTime, NaiveDateTime, DataType::DateTime
597    }
598
599    impl_set_multi_values_slice! {
600        /// Set all UTC instant values via slice
601        ///
602        /// # Parameters
603        ///
604        /// * `values` - The UTC instant value slice to set
605        ///
606        /// # Returns
607        ///
608        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
609        set_instants_slice, Instant, DateTime<Utc>, DataType::Instant
610    }
611
612    impl_set_multi_values_slice! {
613        /// Set all big integer values via slice
614        ///
615        /// # Parameters
616        ///
617        /// * `values` - The big integer value slice to set
618        ///
619        /// # Returns
620        ///
621        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
622        set_bigintegers_slice, BigInteger, BigInt, DataType::BigInteger
623    }
624
625    impl_set_multi_values_slice! {
626        /// Set all big decimal values via slice
627        ///
628        /// # Parameters
629        ///
630        /// * `values` - The big decimal value slice to set
631        ///
632        /// # Returns
633        ///
634        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
635        set_bigdecimals_slice, BigDecimal, BigDecimal, DataType::BigDecimal
636    }
637
638    impl_set_multi_values_slice! {
639        /// Set all isize values via slice
640        set_intsizes_slice, IntSize, isize, DataType::IntSize
641    }
642
643    impl_set_multi_values_slice! {
644        /// Set all usize values via slice
645        set_uintsizes_slice, UIntSize, usize, DataType::UIntSize
646    }
647
648    impl_set_multi_values_slice! {
649        /// Set all Duration values via slice
650        set_durations_slice, Duration, Duration, DataType::Duration
651    }
652
653    impl_set_multi_values_slice! {
654        /// Set all Url values via slice
655        set_urls_slice, Url, Url, DataType::Url
656    }
657
658    impl_set_multi_values_slice! {
659        /// Set all StringMap values via slice
660        set_string_maps_slice, StringMap, HashMap<String, String>, DataType::StringMap
661    }
662
663    impl_set_multi_values_slice! {
664        /// Set all Json values via slice
665        set_jsons_slice, Json, serde_json::Value, DataType::Json
666    }
667
668    // ========================================================================
669    // Set single value operations
670    // ========================================================================
671
672    impl_set_single_value! {
673        /// Set single boolean value
674        ///
675        /// # Parameters
676        ///
677        /// * `value` - The boolean value to set
678        ///
679        /// # Returns
680        ///
681        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
682        ///
683        /// # Example
684        ///
685        /// ```rust
686        /// use qubit_datatype::DataType;
687        /// use qubit_value::MultiValues;
688        ///
689        /// let mut values = MultiValues::Empty(DataType::Bool);
690        /// values.set_bool(true).unwrap();
691        /// assert_eq!(values.get_bools().unwrap(), &[true]);
692        /// ```
693        set_bool, Bool, bool, DataType::Bool
694    }
695
696    impl_set_single_value! {
697        /// Set single character value
698        ///
699        /// # Parameters
700        ///
701        /// * `value` - The character value to set
702        ///
703        /// # Returns
704        ///
705        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
706        set_char, Char, char, DataType::Char
707    }
708
709    impl_set_single_value! {
710        /// Set single int8 value
711        ///
712        /// # Parameters
713        ///
714        /// * `value` - The int8 value to set
715        ///
716        /// # Returns
717        ///
718        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
719        set_int8, Int8, i8, DataType::Int8
720    }
721
722    impl_set_single_value! {
723        /// Set single int16 value
724        ///
725        /// # Parameters
726        ///
727        /// * `value` - The int16 value to set
728        ///
729        /// # Returns
730        ///
731        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
732        set_int16, Int16, i16, DataType::Int16
733    }
734
735    impl_set_single_value! {
736        /// Set single int32 value
737        ///
738        /// # Parameters
739        ///
740        /// * `value` - The int32 value to set
741        ///
742        /// # Returns
743        ///
744        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
745        set_int32, Int32, i32, DataType::Int32
746    }
747
748    impl_set_single_value! {
749        /// Set single int64 value
750        ///
751        /// # Parameters
752        ///
753        /// * `value` - The int64 value to set
754        ///
755        /// # Returns
756        ///
757        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
758        set_int64, Int64, i64, DataType::Int64
759    }
760
761    impl_set_single_value! {
762        /// Set single int128 value
763        ///
764        /// # Parameters
765        ///
766        /// * `value` - The int128 value to set
767        ///
768        /// # Returns
769        ///
770        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
771        set_int128, Int128, i128, DataType::Int128
772    }
773
774    impl_set_single_value! {
775        /// Set single uint8 value
776        ///
777        /// # Parameters
778        ///
779        /// * `value` - The uint8 value to set
780        ///
781        /// # Returns
782        ///
783        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
784        set_uint8, UInt8, u8, DataType::UInt8
785    }
786
787    impl_set_single_value! {
788        /// Set single uint16 value
789        ///
790        /// # Parameters
791        ///
792        /// * `value` - The uint16 value to set
793        ///
794        /// # Returns
795        ///
796        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
797        set_uint16, UInt16, u16, DataType::UInt16
798    }
799
800    impl_set_single_value! {
801        /// Set single uint32 value
802        ///
803        /// # Parameters
804        ///
805        /// * `value` - The uint32 value to set
806        ///
807        /// # Returns
808        ///
809        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
810        set_uint32, UInt32, u32, DataType::UInt32
811    }
812
813    impl_set_single_value! {
814        /// Set single uint64 value
815        ///
816        /// # Parameters
817        ///
818        /// * `value` - The uint64 value to set
819        ///
820        /// # Returns
821        ///
822        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
823        set_uint64, UInt64, u64, DataType::UInt64
824    }
825
826    impl_set_single_value! {
827        /// Set single uint128 value
828        ///
829        /// # Parameters
830        ///
831        /// * `value` - The uint128 value to set
832        ///
833        /// # Returns
834        ///
835        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
836        set_uint128, UInt128, u128, DataType::UInt128
837    }
838
839    impl_set_single_value! {
840        /// Set single float32 value
841        ///
842        /// # Parameters
843        ///
844        /// * `value` - The float32 value to set
845        ///
846        /// # Returns
847        ///
848        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
849        set_float32, Float32, f32, DataType::Float32
850    }
851
852    impl_set_single_value! {
853        /// Set single float64 value
854        ///
855        /// # Parameters
856        ///
857        /// * `value` - The float64 value to set
858        ///
859        /// # Returns
860        ///
861        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
862        set_float64, Float64, f64, DataType::Float64
863    }
864
865    impl_set_single_value! {
866        /// Set single string value
867        ///
868        /// # Parameters
869        ///
870        /// * `value` - The string value to set
871        ///
872        /// # Returns
873        ///
874        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
875        ///
876        /// # Example
877        ///
878        /// ```rust
879        /// use qubit_datatype::DataType;
880        /// use qubit_value::MultiValues;
881        ///
882        /// let mut values = MultiValues::Empty(DataType::String);
883        /// values.set_string("hello".to_string()).unwrap();
884        /// assert_eq!(values.get_strings().unwrap(), &["hello"]);
885        /// ```
886        set_string, String, String, DataType::String
887    }
888
889    impl_set_single_value! {
890        /// Set single date value
891        ///
892        /// # Parameters
893        ///
894        /// * `value` - The date value to set
895        ///
896        /// # Returns
897        ///
898        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
899        set_date, Date, NaiveDate, DataType::Date
900    }
901
902    impl_set_single_value! {
903        /// Set single time value
904        ///
905        /// # Parameters
906        ///
907        /// * `value` - The time value to set
908        ///
909        /// # Returns
910        ///
911        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
912        set_time, Time, NaiveTime, DataType::Time
913    }
914
915    impl_set_single_value! {
916        /// Set single datetime value
917        ///
918        /// # Parameters
919        ///
920        /// * `value` - The datetime value to set
921        ///
922        /// # Returns
923        ///
924        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
925        set_datetime, DateTime, NaiveDateTime, DataType::DateTime
926    }
927
928    impl_set_single_value! {
929        /// Set single UTC instant value
930        ///
931        /// # Parameters
932        ///
933        /// * `value` - The UTC instant value to set
934        ///
935        /// # Returns
936        ///
937        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
938        set_instant, Instant, DateTime<Utc>, DataType::Instant
939    }
940
941    impl_set_single_value! {
942        /// Set single big integer value
943        ///
944        /// # Parameters
945        ///
946        /// * `value` - The big integer value to set
947        ///
948        /// # Returns
949        ///
950        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
951        set_biginteger, BigInteger, BigInt, DataType::BigInteger
952    }
953
954    impl_set_single_value! {
955        /// Set single big decimal value
956        ///
957        /// # Parameters
958        ///
959        /// * `value` - The big decimal value to set
960        ///
961        /// # Returns
962        ///
963        /// If setting succeeds, returns `Ok(())`; otherwise returns an error
964        set_bigdecimal, BigDecimal, BigDecimal, DataType::BigDecimal
965    }
966
967    impl_set_single_value! {
968        /// Set single isize value
969        set_intsize, IntSize, isize, DataType::IntSize
970    }
971
972    impl_set_single_value! {
973        /// Set single usize value
974        set_uintsize, UIntSize, usize, DataType::UIntSize
975    }
976
977    impl_set_single_value! {
978        /// Set single Duration value
979        set_duration, Duration, Duration, DataType::Duration
980    }
981
982    impl_set_single_value! {
983        /// Set single Url value
984        set_url, Url, Url, DataType::Url
985    }
986
987    impl_set_single_value! {
988        /// Set single StringMap value
989        set_string_map, StringMap, HashMap<String, String>, DataType::StringMap
990    }
991
992    impl_set_single_value! {
993        /// Set single Json value
994        set_json, Json, serde_json::Value, DataType::Json
995    }
996}