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