1use crate::wrap::Wrap;
2use crate::{Chain, Error, Track};
3use alloc::borrow::ToOwned as _;
4use alloc::string::{String, ToString as _};
5use core::cell::Cell;
6use core::fmt::Display;
7use serde::ser::{self, Serialize};
8
9pub fn serialize<T, S>(value: &T, serializer: S) -> Result<S::Ok, Error<S::Error>>
51where
52 T: ?Sized + Serialize,
53 S: ser::Serializer,
54{
55 let mut track = Track::new();
56 match T::serialize(value, Serializer::new(serializer, &mut track)) {
57 Ok(ok) => Ok(ok),
58 Err(err) => Err(Error {
59 path: track.path(),
60 original: err,
61 }),
62 }
63}
64
65pub struct Serializer<'a, 'b, S> {
98 ser: S,
99 chain: &'a Chain<'a>,
100 track: &'b Track,
101}
102
103impl<'a, 'b, S> Serializer<'a, 'b, S> {
104 #[allow(clippy::needless_pass_by_ref_mut)]
105 pub fn new(ser: S, track: &'b mut Track) -> Self {
106 Serializer {
107 ser,
108 chain: &Chain::Root,
109 track,
110 }
111 }
112}
113
114impl<'a, 'b, S> ser::Serializer for Serializer<'a, 'b, S>
115where
116 S: ser::Serializer,
117{
118 type Ok = S::Ok;
119 type Error = S::Error;
120 type SerializeSeq = WrapSeq<'a, 'b, S::SerializeSeq>;
121 type SerializeTuple = WrapSeq<'a, 'b, S::SerializeTuple>;
122 type SerializeTupleStruct = WrapSeq<'a, 'b, S::SerializeTupleStruct>;
123 type SerializeTupleVariant = WrapSeq<'a, 'b, S::SerializeTupleVariant>;
124 type SerializeMap = WrapMap<'a, 'b, S::SerializeMap>;
125 type SerializeStruct = Wrap<'a, 'b, S::SerializeStruct>;
126 type SerializeStructVariant = Wrap<'a, 'b, S::SerializeStructVariant>;
127
128 fn serialize_bool(self, v: bool) -> Result<Self::Ok, Self::Error> {
129 let chain = self.chain;
130 let track = self.track;
131 self.ser
132 .serialize_bool(v)
133 .map_err(|err| track.trigger(chain, err))
134 }
135
136 fn serialize_i8(self, v: i8) -> Result<Self::Ok, Self::Error> {
137 let chain = self.chain;
138 let track = self.track;
139 self.ser
140 .serialize_i8(v)
141 .map_err(|err| track.trigger(chain, err))
142 }
143
144 fn serialize_i16(self, v: i16) -> Result<Self::Ok, Self::Error> {
145 let chain = self.chain;
146 let track = self.track;
147 self.ser
148 .serialize_i16(v)
149 .map_err(|err| track.trigger(chain, err))
150 }
151
152 fn serialize_i32(self, v: i32) -> Result<Self::Ok, Self::Error> {
153 let chain = self.chain;
154 let track = self.track;
155 self.ser
156 .serialize_i32(v)
157 .map_err(|err| track.trigger(chain, err))
158 }
159
160 fn serialize_i64(self, v: i64) -> Result<Self::Ok, Self::Error> {
161 let chain = self.chain;
162 let track = self.track;
163 self.ser
164 .serialize_i64(v)
165 .map_err(|err| track.trigger(chain, err))
166 }
167
168 fn serialize_i128(self, v: i128) -> Result<Self::Ok, Self::Error> {
169 let chain = self.chain;
170 let track = self.track;
171 self.ser
172 .serialize_i128(v)
173 .map_err(|err| track.trigger(chain, err))
174 }
175
176 fn serialize_u8(self, v: u8) -> Result<Self::Ok, Self::Error> {
177 let chain = self.chain;
178 let track = self.track;
179 self.ser
180 .serialize_u8(v)
181 .map_err(|err| track.trigger(chain, err))
182 }
183
184 fn serialize_u16(self, v: u16) -> Result<Self::Ok, Self::Error> {
185 let chain = self.chain;
186 let track = self.track;
187 self.ser
188 .serialize_u16(v)
189 .map_err(|err| track.trigger(chain, err))
190 }
191
192 fn serialize_u32(self, v: u32) -> Result<Self::Ok, Self::Error> {
193 let chain = self.chain;
194 let track = self.track;
195 self.ser
196 .serialize_u32(v)
197 .map_err(|err| track.trigger(chain, err))
198 }
199
200 fn serialize_u64(self, v: u64) -> Result<Self::Ok, Self::Error> {
201 let chain = self.chain;
202 let track = self.track;
203 self.ser
204 .serialize_u64(v)
205 .map_err(|err| track.trigger(chain, err))
206 }
207
208 fn serialize_u128(self, v: u128) -> Result<Self::Ok, Self::Error> {
209 let chain = self.chain;
210 let track = self.track;
211 self.ser
212 .serialize_u128(v)
213 .map_err(|err| track.trigger(chain, err))
214 }
215
216 fn serialize_f32(self, v: f32) -> Result<Self::Ok, Self::Error> {
217 let chain = self.chain;
218 let track = self.track;
219 self.ser
220 .serialize_f32(v)
221 .map_err(|err| track.trigger(chain, err))
222 }
223
224 fn serialize_f64(self, v: f64) -> Result<Self::Ok, Self::Error> {
225 let chain = self.chain;
226 let track = self.track;
227 self.ser
228 .serialize_f64(v)
229 .map_err(|err| track.trigger(chain, err))
230 }
231
232 fn serialize_char(self, v: char) -> Result<Self::Ok, Self::Error> {
233 let chain = self.chain;
234 let track = self.track;
235 self.ser
236 .serialize_char(v)
237 .map_err(|err| track.trigger(chain, err))
238 }
239
240 fn serialize_str(self, v: &str) -> Result<Self::Ok, Self::Error> {
241 let chain = self.chain;
242 let track = self.track;
243 self.ser
244 .serialize_str(v)
245 .map_err(|err| track.trigger(chain, err))
246 }
247
248 fn serialize_bytes(self, v: &[u8]) -> Result<Self::Ok, Self::Error> {
249 let chain = self.chain;
250 let track = self.track;
251 self.ser
252 .serialize_bytes(v)
253 .map_err(|err| track.trigger(chain, err))
254 }
255
256 fn serialize_none(self) -> Result<Self::Ok, Self::Error> {
257 let chain = self.chain;
258 let track = self.track;
259 self.ser
260 .serialize_none()
261 .map_err(|err| track.trigger(chain, err))
262 }
263
264 fn serialize_some<T>(self, value: &T) -> Result<Self::Ok, Self::Error>
265 where
266 T: ?Sized + Serialize,
267 {
268 let chain = self.chain;
269 let track = self.track;
270 self.ser
271 .serialize_some(value)
272 .map_err(|err| track.trigger(chain, err))
273 }
274
275 fn serialize_unit(self) -> Result<Self::Ok, Self::Error> {
276 let chain = self.chain;
277 let track = self.track;
278 self.ser
279 .serialize_unit()
280 .map_err(|err| track.trigger(chain, err))
281 }
282
283 fn serialize_unit_struct(self, name: &'static str) -> Result<Self::Ok, Self::Error> {
284 let chain = self.chain;
285 let track = self.track;
286 self.ser
287 .serialize_unit_struct(name)
288 .map_err(|err| track.trigger(chain, err))
289 }
290
291 fn serialize_unit_variant(
292 self,
293 name: &'static str,
294 variant_index: u32,
295 variant: &'static str,
296 ) -> Result<Self::Ok, Self::Error> {
297 let chain = self.chain;
298 let track = self.track;
299 self.ser
300 .serialize_unit_variant(name, variant_index, variant)
301 .map_err(|err| track.trigger(chain, err))
302 }
303
304 fn serialize_newtype_struct<T>(
305 self,
306 name: &'static str,
307 value: &T,
308 ) -> Result<Self::Ok, Self::Error>
309 where
310 T: ?Sized + Serialize,
311 {
312 let chain = self.chain;
313 let track = self.track;
314 self.ser
315 .serialize_newtype_struct(name, value)
316 .map_err(|err| track.trigger(chain, err))
317 }
318
319 fn serialize_newtype_variant<T>(
320 self,
321 name: &'static str,
322 variant_index: u32,
323 variant: &'static str,
324 value: &T,
325 ) -> Result<Self::Ok, Self::Error>
326 where
327 T: ?Sized + Serialize,
328 {
329 let chain = self.chain;
330 let track = self.track;
331 self.ser
332 .serialize_newtype_variant(name, variant_index, variant, value)
333 .map_err(|err| track.trigger(chain, err))
334 }
335
336 fn serialize_seq(self, len: Option<usize>) -> Result<Self::SerializeSeq, Self::Error> {
337 let chain = self.chain;
338 let track = self.track;
339 match self.ser.serialize_seq(len) {
340 Ok(delegate) => Ok(WrapSeq::new(delegate, chain, track)),
341 Err(err) => Err(track.trigger(chain, err)),
342 }
343 }
344
345 fn serialize_tuple(self, len: usize) -> Result<Self::SerializeTuple, Self::Error> {
346 let chain = self.chain;
347 let track = self.track;
348 match self.ser.serialize_tuple(len) {
349 Ok(delegate) => Ok(WrapSeq::new(delegate, chain, track)),
350 Err(err) => Err(track.trigger(chain, err)),
351 }
352 }
353
354 fn serialize_tuple_struct(
355 self,
356 name: &'static str,
357 len: usize,
358 ) -> Result<Self::SerializeTupleStruct, Self::Error> {
359 let chain = self.chain;
360 let track = self.track;
361 match self.ser.serialize_tuple_struct(name, len) {
362 Ok(delegate) => Ok(WrapSeq::new(delegate, chain, track)),
363 Err(err) => Err(track.trigger(chain, err)),
364 }
365 }
366
367 fn serialize_tuple_variant(
368 self,
369 name: &'static str,
370 variant_index: u32,
371 variant: &'static str,
372 len: usize,
373 ) -> Result<Self::SerializeTupleVariant, Self::Error> {
374 let chain = self.chain;
375 let track = self.track;
376 match self
377 .ser
378 .serialize_tuple_variant(name, variant_index, variant, len)
379 {
380 Ok(delegate) => Ok(WrapSeq::new(delegate, chain, track)),
381 Err(err) => Err(track.trigger(chain, err)),
382 }
383 }
384
385 fn serialize_map(self, len: Option<usize>) -> Result<Self::SerializeMap, Self::Error> {
386 let chain = self.chain;
387 let track = self.track;
388 match self.ser.serialize_map(len) {
389 Ok(delegate) => Ok(WrapMap::new(delegate, chain, track)),
390 Err(err) => Err(track.trigger(chain, err)),
391 }
392 }
393
394 fn serialize_struct(
395 self,
396 name: &'static str,
397 len: usize,
398 ) -> Result<Self::SerializeStruct, Self::Error> {
399 let chain = self.chain;
400 let track = self.track;
401 match self.ser.serialize_struct(name, len) {
402 Ok(delegate) => Ok(Wrap::new(delegate, chain, track)),
403 Err(err) => Err(track.trigger(chain, err)),
404 }
405 }
406
407 fn serialize_struct_variant(
408 self,
409 name: &'static str,
410 variant_index: u32,
411 variant: &'static str,
412 len: usize,
413 ) -> Result<Self::SerializeStructVariant, Self::Error> {
414 let chain = self.chain;
415 let track = self.track;
416 match self
417 .ser
418 .serialize_struct_variant(name, variant_index, variant, len)
419 {
420 Ok(delegate) => Ok(Wrap::new(delegate, chain, track)),
421 Err(err) => Err(track.trigger(chain, err)),
422 }
423 }
424
425 fn collect_str<T>(self, value: &T) -> Result<Self::Ok, Self::Error>
426 where
427 T: ?Sized + Display,
428 {
429 let chain = self.chain;
430 let track = self.track;
431 self.ser
432 .collect_str(value)
433 .map_err(|err| track.trigger(chain, err))
434 }
435
436 fn is_human_readable(&self) -> bool {
437 self.ser.is_human_readable()
438 }
439}
440
441struct TrackedValue<'a, 'b, X> {
442 value: X,
443 chain: &'a Chain<'a>,
444 track: &'b Track,
445}
446
447impl<'a, 'b, X> TrackedValue<'a, 'b, X> {
448 fn new(value: X, chain: &'a Chain<'a>, track: &'b Track) -> Self {
449 TrackedValue {
450 value,
451 chain,
452 track,
453 }
454 }
455}
456
457impl<'a, 'b, X> Serialize for TrackedValue<'a, 'b, X>
458where
459 X: Serialize,
460{
461 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
462 where
463 S: ser::Serializer,
464 {
465 let chain = self.chain;
466 let track = self.track;
467 self.value
468 .serialize(Serializer {
469 ser: serializer,
470 chain,
471 track,
472 })
473 .map_err(|err| track.trigger(chain, err))
474 }
475}
476
477pub struct WrapSeq<'a, 'b, S> {
478 delegate: S,
479 chain: &'a Chain<'a>,
480 index: usize,
481 track: &'b Track,
482}
483
484impl<'a, 'b, S> WrapSeq<'a, 'b, S> {
485 fn new(delegate: S, chain: &'a Chain<'a>, track: &'b Track) -> Self {
486 WrapSeq {
487 delegate,
488 chain,
489 index: 0,
490 track,
491 }
492 }
493}
494
495impl<'a, 'b, S> ser::SerializeSeq for WrapSeq<'a, 'b, S>
496where
497 S: ser::SerializeSeq,
498{
499 type Ok = S::Ok;
500 type Error = S::Error;
501
502 fn serialize_element<T>(&mut self, value: &T) -> Result<(), Self::Error>
503 where
504 T: ?Sized + Serialize,
505 {
506 let parent = self.chain;
507 let chain = Chain::Seq {
508 parent,
509 index: self.index,
510 };
511 let track = self.track;
512 self.index += 1;
513 self.delegate
514 .serialize_element(&TrackedValue::new(value, &chain, track))
515 .map_err(|err| track.trigger(parent, err))
516 }
517
518 fn end(self) -> Result<Self::Ok, Self::Error> {
519 let chain = self.chain;
520 let track = self.track;
521 self.delegate.end().map_err(|err| track.trigger(chain, err))
522 }
523}
524
525impl<'a, 'b, S> ser::SerializeTuple for WrapSeq<'a, 'b, S>
526where
527 S: ser::SerializeTuple,
528{
529 type Ok = S::Ok;
530 type Error = S::Error;
531
532 fn serialize_element<T>(&mut self, value: &T) -> Result<(), Self::Error>
533 where
534 T: ?Sized + Serialize,
535 {
536 let parent = self.chain;
537 let chain = Chain::Seq {
538 parent,
539 index: self.index,
540 };
541 let track = self.track;
542 self.index += 1;
543 self.delegate
544 .serialize_element(&TrackedValue::new(value, &chain, track))
545 .map_err(|err| track.trigger(parent, err))
546 }
547
548 fn end(self) -> Result<Self::Ok, Self::Error> {
549 let chain = self.chain;
550 let track = self.track;
551 self.delegate.end().map_err(|err| track.trigger(chain, err))
552 }
553}
554
555impl<'a, 'b, S> ser::SerializeTupleStruct for WrapSeq<'a, 'b, S>
556where
557 S: ser::SerializeTupleStruct,
558{
559 type Ok = S::Ok;
560 type Error = S::Error;
561
562 fn serialize_field<T>(&mut self, value: &T) -> Result<(), Self::Error>
563 where
564 T: ?Sized + Serialize,
565 {
566 let parent = self.chain;
567 let chain = Chain::Seq {
568 parent,
569 index: self.index,
570 };
571 let track = self.track;
572 self.index += 1;
573 self.delegate
574 .serialize_field(&TrackedValue::new(value, &chain, track))
575 .map_err(|err| track.trigger(parent, err))
576 }
577
578 fn end(self) -> Result<Self::Ok, Self::Error> {
579 let chain = self.chain;
580 let track = self.track;
581 self.delegate.end().map_err(|err| track.trigger(chain, err))
582 }
583}
584
585impl<'a, 'b, S> ser::SerializeTupleVariant for WrapSeq<'a, 'b, S>
586where
587 S: ser::SerializeTupleVariant,
588{
589 type Ok = S::Ok;
590 type Error = S::Error;
591
592 fn serialize_field<T>(&mut self, value: &T) -> Result<(), Self::Error>
593 where
594 T: ?Sized + Serialize,
595 {
596 let parent = self.chain;
597 let chain = Chain::Seq {
598 parent,
599 index: self.index,
600 };
601 let track = self.track;
602 self.index += 1;
603 self.delegate
604 .serialize_field(&TrackedValue::new(value, &chain, track))
605 .map_err(|err| track.trigger(parent, err))
606 }
607
608 fn end(self) -> Result<Self::Ok, Self::Error> {
609 let chain = self.chain;
610 let track = self.track;
611 self.delegate.end().map_err(|err| track.trigger(chain, err))
612 }
613}
614
615pub struct WrapMap<'a, 'b, S> {
616 delegate: S,
617 chain: &'a Chain<'a>,
618 key: Cell<Option<String>>,
619 track: &'b Track,
620}
621
622impl<'a, 'b, S> WrapMap<'a, 'b, S> {
623 fn new(delegate: S, chain: &'a Chain<'a>, track: &'b Track) -> Self {
624 WrapMap {
625 delegate,
626 chain,
627 key: Cell::new(None),
628 track,
629 }
630 }
631}
632
633impl<'a, 'b, S> ser::SerializeMap for WrapMap<'a, 'b, S>
634where
635 S: ser::SerializeMap,
636{
637 type Ok = S::Ok;
638 type Error = S::Error;
639
640 fn serialize_key<T>(&mut self, key: &T) -> Result<(), Self::Error>
641 where
642 T: ?Sized + Serialize,
643 {
644 let chain = self.chain;
645 let track = self.track;
646 self.key.set(None);
647 self.delegate
648 .serialize_key(&CaptureKey::new(&self.key, key))
649 .map_err(|err| track.trigger(chain, err))
650 }
651
652 fn serialize_value<T>(&mut self, value: &T) -> Result<(), Self::Error>
653 where
654 T: ?Sized + Serialize,
655 {
656 let parent = self.chain;
657 let chain = match self.key.take() {
658 Some(key) => Chain::Map { parent, key },
659 None => Chain::NonStringKey { parent },
660 };
661 let track = self.track;
662 self.delegate
663 .serialize_value(&TrackedValue::new(value, &chain, track))
664 .map_err(|err| track.trigger(parent, err))
665 }
666
667 fn end(self) -> Result<Self::Ok, Self::Error> {
668 let chain = self.chain;
669 let track = self.track;
670 self.delegate.end().map_err(|err| track.trigger(chain, err))
671 }
672}
673
674impl<'a, 'b, S> ser::SerializeStruct for Wrap<'a, 'b, S>
675where
676 S: ser::SerializeStruct,
677{
678 type Ok = S::Ok;
679 type Error = S::Error;
680
681 fn serialize_field<T>(&mut self, key: &'static str, value: &T) -> Result<(), Self::Error>
682 where
683 T: ?Sized + Serialize,
684 {
685 let parent = self.chain;
686 let chain = Chain::Struct { parent, key };
687 let track = self.track;
688 self.delegate
689 .serialize_field(key, &TrackedValue::new(value, &chain, track))
690 .map_err(|err| track.trigger(parent, err))
691 }
692
693 fn end(self) -> Result<Self::Ok, Self::Error> {
694 let chain = self.chain;
695 let track = self.track;
696 self.delegate.end().map_err(|err| track.trigger(chain, err))
697 }
698
699 fn skip_field(&mut self, key: &'static str) -> Result<(), Self::Error> {
700 let chain = self.chain;
701 let track = self.track;
702 self.delegate
703 .skip_field(key)
704 .map_err(|err| track.trigger(chain, err))
705 }
706}
707
708impl<'a, 'b, S> ser::SerializeStructVariant for Wrap<'a, 'b, S>
709where
710 S: ser::SerializeStructVariant,
711{
712 type Ok = S::Ok;
713 type Error = S::Error;
714
715 fn serialize_field<T>(&mut self, key: &'static str, value: &T) -> Result<(), Self::Error>
716 where
717 T: ?Sized + Serialize,
718 {
719 let parent = self.chain;
720 let chain = Chain::Struct { parent, key };
721 let track = self.track;
722 self.delegate
723 .serialize_field(key, &TrackedValue::new(value, &chain, track))
724 .map_err(|err| track.trigger(parent, err))
725 }
726
727 fn end(self) -> Result<Self::Ok, Self::Error> {
728 let chain = self.chain;
729 let track = self.track;
730 self.delegate.end().map_err(|err| track.trigger(chain, err))
731 }
732
733 fn skip_field(&mut self, key: &'static str) -> Result<(), Self::Error> {
734 let chain = self.chain;
735 let track = self.track;
736 self.delegate
737 .skip_field(key)
738 .map_err(|err| track.trigger(chain, err))
739 }
740}
741
742struct CaptureKey<'a, T> {
743 out: &'a Cell<Option<String>>,
744 delegate: T,
745}
746
747impl<'a, T> CaptureKey<'a, T> {
748 fn new(out: &'a Cell<Option<String>>, delegate: T) -> Self {
749 CaptureKey { out, delegate }
750 }
751}
752
753impl<'a, T> Serialize for CaptureKey<'a, T>
754where
755 T: Serialize,
756{
757 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
758 where
759 S: ser::Serializer,
760 {
761 self.delegate
762 .serialize(CaptureKey::new(self.out, serializer))
763 }
764}
765
766impl<'a, S> ser::Serializer for CaptureKey<'a, S>
767where
768 S: ser::Serializer,
769{
770 type Ok = S::Ok;
771 type Error = S::Error;
772 type SerializeSeq = S::SerializeSeq;
773 type SerializeTuple = S::SerializeTuple;
774 type SerializeTupleStruct = S::SerializeTupleStruct;
775 type SerializeTupleVariant = S::SerializeTupleVariant;
776 type SerializeMap = S::SerializeMap;
777 type SerializeStruct = S::SerializeStruct;
778 type SerializeStructVariant = S::SerializeStructVariant;
779
780 fn serialize_bool(self, v: bool) -> Result<Self::Ok, Self::Error> {
781 let string = if v { "true" } else { "false" };
782 self.out.set(Some(string.to_owned()));
783 self.delegate.serialize_bool(v)
784 }
785
786 fn serialize_i8(self, v: i8) -> Result<Self::Ok, Self::Error> {
787 self.out.set(Some(itoa::Buffer::new().format(v).to_owned()));
788 self.delegate.serialize_i8(v)
789 }
790
791 fn serialize_i16(self, v: i16) -> Result<Self::Ok, Self::Error> {
792 self.out.set(Some(itoa::Buffer::new().format(v).to_owned()));
793 self.delegate.serialize_i16(v)
794 }
795
796 fn serialize_i32(self, v: i32) -> Result<Self::Ok, Self::Error> {
797 self.out.set(Some(itoa::Buffer::new().format(v).to_owned()));
798 self.delegate.serialize_i32(v)
799 }
800
801 fn serialize_i64(self, v: i64) -> Result<Self::Ok, Self::Error> {
802 self.out.set(Some(itoa::Buffer::new().format(v).to_owned()));
803 self.delegate.serialize_i64(v)
804 }
805
806 fn serialize_i128(self, v: i128) -> Result<Self::Ok, Self::Error> {
807 self.out.set(Some(itoa::Buffer::new().format(v).to_owned()));
808 self.delegate.serialize_i128(v)
809 }
810
811 fn serialize_u8(self, v: u8) -> Result<Self::Ok, Self::Error> {
812 self.out.set(Some(itoa::Buffer::new().format(v).to_owned()));
813 self.delegate.serialize_u8(v)
814 }
815
816 fn serialize_u16(self, v: u16) -> Result<Self::Ok, Self::Error> {
817 self.out.set(Some(itoa::Buffer::new().format(v).to_owned()));
818 self.delegate.serialize_u16(v)
819 }
820
821 fn serialize_u32(self, v: u32) -> Result<Self::Ok, Self::Error> {
822 self.out.set(Some(itoa::Buffer::new().format(v).to_owned()));
823 self.delegate.serialize_u32(v)
824 }
825
826 fn serialize_u64(self, v: u64) -> Result<Self::Ok, Self::Error> {
827 self.out.set(Some(itoa::Buffer::new().format(v).to_owned()));
828 self.delegate.serialize_u64(v)
829 }
830
831 fn serialize_u128(self, v: u128) -> Result<Self::Ok, Self::Error> {
832 self.out.set(Some(itoa::Buffer::new().format(v).to_owned()));
833 self.delegate.serialize_u128(v)
834 }
835
836 fn serialize_f32(self, v: f32) -> Result<Self::Ok, Self::Error> {
837 self.delegate.serialize_f32(v)
838 }
839
840 fn serialize_f64(self, v: f64) -> Result<Self::Ok, Self::Error> {
841 self.delegate.serialize_f64(v)
842 }
843
844 fn serialize_char(self, v: char) -> Result<Self::Ok, Self::Error> {
845 self.delegate.serialize_char(v)
846 }
847
848 fn serialize_str(self, v: &str) -> Result<Self::Ok, Self::Error> {
849 self.out.set(Some(v.to_owned()));
850 self.delegate.serialize_str(v)
851 }
852
853 fn serialize_bytes(self, v: &[u8]) -> Result<Self::Ok, Self::Error> {
854 self.delegate.serialize_bytes(v)
855 }
856
857 fn serialize_none(self) -> Result<Self::Ok, Self::Error> {
858 self.delegate.serialize_none()
859 }
860
861 fn serialize_some<T>(self, value: &T) -> Result<Self::Ok, Self::Error>
862 where
863 T: ?Sized + Serialize,
864 {
865 self.delegate
866 .serialize_some(&CaptureKey::new(self.out, value))
867 }
868
869 fn serialize_unit(self) -> Result<Self::Ok, Self::Error> {
870 self.delegate.serialize_unit()
871 }
872
873 fn serialize_unit_struct(self, name: &'static str) -> Result<Self::Ok, Self::Error> {
874 self.delegate.serialize_unit_struct(name)
875 }
876
877 fn serialize_unit_variant(
878 self,
879 name: &'static str,
880 variant_index: u32,
881 variant: &'static str,
882 ) -> Result<Self::Ok, Self::Error> {
883 self.out.set(Some(variant.to_owned()));
884 self.delegate
885 .serialize_unit_variant(name, variant_index, variant)
886 }
887
888 fn serialize_newtype_struct<T>(
889 self,
890 name: &'static str,
891 value: &T,
892 ) -> Result<Self::Ok, Self::Error>
893 where
894 T: ?Sized + Serialize,
895 {
896 self.delegate
897 .serialize_newtype_struct(name, &CaptureKey::new(self.out, value))
898 }
899
900 fn serialize_newtype_variant<T>(
901 self,
902 name: &'static str,
903 variant_index: u32,
904 variant: &'static str,
905 value: &T,
906 ) -> Result<Self::Ok, Self::Error>
907 where
908 T: ?Sized + Serialize,
909 {
910 self.delegate
911 .serialize_newtype_variant(name, variant_index, variant, value)
912 }
913
914 fn serialize_seq(self, len: Option<usize>) -> Result<Self::SerializeSeq, Self::Error> {
915 self.delegate.serialize_seq(len)
916 }
917
918 fn serialize_tuple(self, len: usize) -> Result<Self::SerializeTuple, Self::Error> {
919 self.delegate.serialize_tuple(len)
920 }
921
922 fn serialize_tuple_struct(
923 self,
924 name: &'static str,
925 len: usize,
926 ) -> Result<Self::SerializeTupleStruct, Self::Error> {
927 self.delegate.serialize_tuple_struct(name, len)
928 }
929
930 fn serialize_tuple_variant(
931 self,
932 name: &'static str,
933 variant_index: u32,
934 variant: &'static str,
935 len: usize,
936 ) -> Result<Self::SerializeTupleVariant, Self::Error> {
937 self.delegate
938 .serialize_tuple_variant(name, variant_index, variant, len)
939 }
940
941 fn serialize_map(self, len: Option<usize>) -> Result<Self::SerializeMap, Self::Error> {
942 self.delegate.serialize_map(len)
943 }
944
945 fn serialize_struct(
946 self,
947 name: &'static str,
948 len: usize,
949 ) -> Result<Self::SerializeStruct, Self::Error> {
950 self.delegate.serialize_struct(name, len)
951 }
952
953 fn serialize_struct_variant(
954 self,
955 name: &'static str,
956 variant_index: u32,
957 variant: &'static str,
958 len: usize,
959 ) -> Result<Self::SerializeStructVariant, Self::Error> {
960 self.delegate
961 .serialize_struct_variant(name, variant_index, variant, len)
962 }
963
964 fn collect_seq<I>(self, iter: I) -> Result<Self::Ok, Self::Error>
965 where
966 I: IntoIterator,
967 I::Item: Serialize,
968 {
969 self.delegate.collect_seq(iter)
970 }
971
972 fn collect_map<K, V, I>(self, iter: I) -> Result<Self::Ok, Self::Error>
973 where
974 K: Serialize,
975 V: Serialize,
976 I: IntoIterator<Item = (K, V)>,
977 {
978 self.delegate.collect_map(iter)
979 }
980
981 fn collect_str<T>(self, value: &T) -> Result<Self::Ok, Self::Error>
982 where
983 T: ?Sized + Display,
984 {
985 self.out.set(Some(value.to_string()));
986 self.delegate.collect_str(value)
987 }
988
989 fn is_human_readable(&self) -> bool {
990 self.delegate.is_human_readable()
991 }
992}