Skip to main content

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