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