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}