1#![allow(clippy::exhaustive_structs)]
2
3use std::fmt;
4
5use serde::{
6 de::{Error, Unexpected},
7 ser::{Impossible, Serialize},
8};
9
10use super::{CanonicalJsonError, CanonicalJsonObject, CanonicalJsonValue, to_canonical_value};
11
12type Result<T> = std::result::Result<T, CanonicalJsonError>;
14
15pub struct Serializer;
27
28impl serde::Serializer for Serializer {
29 type Ok = CanonicalJsonValue;
30 type Error = CanonicalJsonError;
31
32 type SerializeSeq = SerializeArray;
33 type SerializeTuple = SerializeArray;
34 type SerializeTupleStruct = SerializeArray;
35 type SerializeTupleVariant = SerializeNamedValue<SerializeArray>;
36 type SerializeMap = SerializeObject;
37 type SerializeStruct = SerializeStruct;
38 type SerializeStructVariant = SerializeNamedValue<SerializeObject>;
39
40 #[inline]
41 fn serialize_bool(self, value: bool) -> Result<Self::Ok> {
42 Ok(CanonicalJsonValue::Bool(value))
43 }
44
45 #[inline]
46 fn serialize_i8(self, value: i8) -> Result<Self::Ok> {
47 Ok(CanonicalJsonValue::Integer(value.into()))
48 }
49
50 #[inline]
51 fn serialize_i16(self, value: i16) -> Result<Self::Ok> {
52 Ok(CanonicalJsonValue::Integer(value.into()))
53 }
54
55 #[inline]
56 fn serialize_i32(self, value: i32) -> Result<Self::Ok> {
57 Ok(CanonicalJsonValue::Integer(value.into()))
58 }
59
60 fn serialize_i64(self, value: i64) -> Result<Self::Ok> {
61 Ok(CanonicalJsonValue::Integer(
62 value.try_into().map_err(|_| CanonicalJsonError::IntegerOutOfRange)?,
63 ))
64 }
65
66 fn serialize_i128(self, value: i128) -> Result<Self::Ok> {
67 Ok(CanonicalJsonValue::Integer(
68 value.try_into().map_err(|_| CanonicalJsonError::IntegerOutOfRange)?,
69 ))
70 }
71
72 #[inline]
73 fn serialize_u8(self, value: u8) -> Result<Self::Ok> {
74 Ok(CanonicalJsonValue::Integer(value.into()))
75 }
76
77 #[inline]
78 fn serialize_u16(self, value: u16) -> Result<Self::Ok> {
79 Ok(CanonicalJsonValue::Integer(value.into()))
80 }
81
82 #[inline]
83 fn serialize_u32(self, value: u32) -> Result<Self::Ok> {
84 Ok(CanonicalJsonValue::Integer(value.into()))
85 }
86
87 #[inline]
88 fn serialize_u64(self, value: u64) -> Result<Self::Ok> {
89 Ok(CanonicalJsonValue::Integer(
90 value.try_into().map_err(|_| CanonicalJsonError::IntegerOutOfRange)?,
91 ))
92 }
93
94 fn serialize_u128(self, value: u128) -> Result<Self::Ok> {
95 Ok(CanonicalJsonValue::Integer(
96 value.try_into().map_err(|_| CanonicalJsonError::IntegerOutOfRange)?,
97 ))
98 }
99
100 #[inline]
101 fn serialize_f32(self, _float: f32) -> Result<Self::Ok> {
102 Err(CanonicalJsonError::InvalidType("float".to_owned()))
103 }
104
105 #[inline]
106 fn serialize_f64(self, _float: f64) -> Result<Self::Ok> {
107 Err(CanonicalJsonError::InvalidType("float".to_owned()))
108 }
109
110 #[inline]
111 fn serialize_char(self, value: char) -> Result<Self::Ok> {
112 Ok(CanonicalJsonValue::String(value.into()))
113 }
114
115 #[inline]
116 fn serialize_str(self, value: &str) -> Result<Self::Ok> {
117 Ok(CanonicalJsonValue::String(value.to_owned()))
118 }
119
120 fn serialize_bytes(self, _value: &[u8]) -> Result<Self::Ok> {
121 Err(CanonicalJsonError::InvalidType("bytes".to_owned()))
122 }
123
124 #[inline]
125 fn serialize_unit(self) -> Result<Self::Ok> {
126 Ok(CanonicalJsonValue::Null)
127 }
128
129 #[inline]
130 fn serialize_unit_struct(self, _name: &'static str) -> Result<Self::Ok> {
131 self.serialize_unit()
133 }
134
135 #[inline]
136 fn serialize_unit_variant(
137 self,
138 _name: &'static str,
139 _variant_index: u32,
140 variant: &'static str,
141 ) -> Result<Self::Ok> {
142 self.serialize_str(variant)
144 }
145
146 #[inline]
147 fn serialize_newtype_struct<T>(self, _name: &'static str, value: &T) -> Result<Self::Ok>
148 where
149 T: ?Sized + Serialize,
150 {
151 value.serialize(self)
153 }
154
155 fn serialize_newtype_variant<T>(
156 self,
157 _name: &'static str,
158 _variant_index: u32,
159 variant: &'static str,
160 value: &T,
161 ) -> Result<Self::Ok>
162 where
163 T: ?Sized + Serialize,
164 {
165 let mut values = CanonicalJsonObject::new();
167 values.insert(variant.to_owned(), to_canonical_value(value)?);
168 Ok(CanonicalJsonValue::Object(values))
169 }
170
171 #[inline]
172 fn serialize_none(self) -> Result<Self::Ok> {
173 self.serialize_unit()
174 }
175
176 #[inline]
177 fn serialize_some<T>(self, value: &T) -> Result<Self::Ok>
178 where
179 T: ?Sized + Serialize,
180 {
181 value.serialize(self)
182 }
183
184 fn serialize_seq(self, len: Option<usize>) -> Result<Self::SerializeSeq> {
185 Ok(SerializeArray(Vec::with_capacity(len.unwrap_or_default())))
187 }
188
189 fn serialize_tuple(self, len: usize) -> Result<Self::SerializeTuple> {
190 self.serialize_seq(Some(len))
192 }
193
194 fn serialize_tuple_struct(
195 self,
196 _name: &'static str,
197 len: usize,
198 ) -> Result<Self::SerializeTupleStruct> {
199 self.serialize_seq(Some(len))
201 }
202
203 fn serialize_tuple_variant(
204 self,
205 _name: &'static str,
206 _variant_index: u32,
207 variant: &'static str,
208 len: usize,
209 ) -> Result<Self::SerializeTupleVariant> {
210 Ok(SerializeNamedValue {
212 name: String::from(variant),
213 serialize: self.serialize_tuple(len)?,
214 })
215 }
216
217 fn serialize_map(self, _len: Option<usize>) -> Result<Self::SerializeMap> {
218 Ok(SerializeObject { object: CanonicalJsonObject::new(), next_key: None })
219 }
220
221 fn serialize_struct(self, name: &'static str, len: usize) -> Result<Self::SerializeStruct> {
222 if name == SerializeStruct::RAW_VALUE_FIELD_NAME {
223 Ok(SerializeStruct::RawValue(None))
224 } else {
225 self.serialize_map(Some(len)).map(SerializeStruct::Object)
226 }
227 }
228
229 fn serialize_struct_variant(
230 self,
231 _name: &'static str,
232 _variant_index: u32,
233 variant: &'static str,
234 len: usize,
235 ) -> Result<Self::SerializeStructVariant> {
236 Ok(SerializeNamedValue {
238 name: String::from(variant),
239 serialize: self.serialize_map(Some(len))?,
240 })
241 }
242
243 fn collect_str<T>(self, value: &T) -> Result<Self::Ok>
244 where
245 T: ?Sized + fmt::Display,
246 {
247 Ok(CanonicalJsonValue::String(value.to_string()))
248 }
249}
250
251pub struct SerializeArray(Vec<CanonicalJsonValue>);
253
254impl serde::ser::SerializeSeq for SerializeArray {
255 type Ok = CanonicalJsonValue;
256 type Error = CanonicalJsonError;
257
258 fn serialize_element<T>(&mut self, value: &T) -> Result<()>
259 where
260 T: ?Sized + Serialize,
261 {
262 self.0.push(to_canonical_value(value)?);
263 Ok(())
264 }
265
266 fn end(self) -> Result<Self::Ok> {
267 Ok(CanonicalJsonValue::Array(self.0))
268 }
269}
270
271impl serde::ser::SerializeTuple for SerializeArray {
272 type Ok = CanonicalJsonValue;
273 type Error = CanonicalJsonError;
274
275 fn serialize_element<T>(&mut self, value: &T) -> Result<()>
276 where
277 T: ?Sized + Serialize,
278 {
279 serde::ser::SerializeSeq::serialize_element(self, value)
280 }
281
282 fn end(self) -> Result<Self::Ok> {
283 serde::ser::SerializeSeq::end(self)
284 }
285}
286
287impl serde::ser::SerializeTupleStruct for SerializeArray {
288 type Ok = CanonicalJsonValue;
289 type Error = CanonicalJsonError;
290
291 fn serialize_field<T>(&mut self, value: &T) -> Result<()>
292 where
293 T: ?Sized + Serialize,
294 {
295 serde::ser::SerializeSeq::serialize_element(self, value)
296 }
297
298 fn end(self) -> Result<Self::Ok> {
299 serde::ser::SerializeSeq::end(self)
300 }
301}
302
303pub struct SerializeObject {
305 object: CanonicalJsonObject,
307 next_key: Option<String>,
309}
310
311impl serde::ser::SerializeMap for SerializeObject {
312 type Ok = CanonicalJsonValue;
313 type Error = CanonicalJsonError;
314
315 fn serialize_key<T>(&mut self, key: &T) -> Result<()>
316 where
317 T: ?Sized + Serialize,
318 {
319 self.next_key = Some(key.serialize(ObjectKeySerializer)?);
320 Ok(())
321 }
322
323 fn serialize_value<T>(&mut self, value: &T) -> Result<()>
324 where
325 T: ?Sized + Serialize,
326 {
327 let key = self.next_key.take().expect("serialize_value called before serialize_key");
330
331 if self.object.contains_key(&key) {
332 return Err(CanonicalJsonError::DuplicateObjectKey(key));
333 }
334
335 self.object.insert(key, to_canonical_value(value)?);
336
337 Ok(())
338 }
339
340 fn end(self) -> Result<Self::Ok> {
341 Ok(CanonicalJsonValue::Object(self.object))
342 }
343}
344
345impl serde::ser::SerializeStruct for SerializeObject {
346 type Ok = CanonicalJsonValue;
347 type Error = CanonicalJsonError;
348
349 fn serialize_field<T>(&mut self, key: &'static str, value: &T) -> Result<()>
350 where
351 T: ?Sized + Serialize,
352 {
353 serde::ser::SerializeMap::serialize_entry(self, key, value)
354 }
355
356 fn end(self) -> Result<Self::Ok> {
357 serde::ser::SerializeMap::end(self)
358 }
359}
360
361pub struct SerializeNamedValue<V> {
365 name: String,
367 serialize: V,
369}
370
371impl serde::ser::SerializeTupleVariant for SerializeNamedValue<SerializeArray> {
372 type Ok = CanonicalJsonValue;
373 type Error = CanonicalJsonError;
374
375 fn serialize_field<T>(&mut self, value: &T) -> Result<()>
376 where
377 T: ?Sized + Serialize,
378 {
379 serde::ser::SerializeSeq::serialize_element(&mut self.serialize, value)
380 }
381
382 fn end(self) -> Result<Self::Ok> {
383 let mut object = CanonicalJsonObject::new();
384 object.insert(self.name, serde::ser::SerializeSeq::end(self.serialize)?);
385 Ok(CanonicalJsonValue::Object(object))
386 }
387}
388
389impl serde::ser::SerializeStructVariant for SerializeNamedValue<SerializeObject> {
390 type Ok = CanonicalJsonValue;
391 type Error = CanonicalJsonError;
392
393 fn serialize_field<T>(&mut self, key: &'static str, value: &T) -> Result<()>
394 where
395 T: ?Sized + Serialize,
396 {
397 serde::ser::SerializeMap::serialize_entry(&mut self.serialize, key, value)
398 }
399
400 fn end(self) -> Result<Self::Ok> {
401 let mut object = CanonicalJsonObject::new();
402 object.insert(self.name, serde::ser::SerializeMap::end(self.serialize)?);
403 Ok(CanonicalJsonValue::Object(object))
404 }
405}
406
407struct ObjectKeySerializer;
411
412impl serde::Serializer for ObjectKeySerializer {
413 type Ok = String;
414 type Error = CanonicalJsonError;
415
416 type SerializeSeq = Impossible<String, CanonicalJsonError>;
417 type SerializeTuple = Impossible<String, CanonicalJsonError>;
418 type SerializeTupleStruct = Impossible<String, CanonicalJsonError>;
419 type SerializeTupleVariant = Impossible<String, CanonicalJsonError>;
420 type SerializeMap = Impossible<String, CanonicalJsonError>;
421 type SerializeStruct = Impossible<String, CanonicalJsonError>;
422 type SerializeStructVariant = Impossible<String, CanonicalJsonError>;
423
424 #[inline]
425 fn serialize_unit_variant(
426 self,
427 _name: &'static str,
428 _variant_index: u32,
429 variant: &'static str,
430 ) -> Result<Self::Ok> {
431 Ok(variant.to_owned())
432 }
433
434 #[inline]
435 fn serialize_newtype_struct<T>(self, _name: &'static str, value: &T) -> Result<Self::Ok>
436 where
437 T: ?Sized + Serialize,
438 {
439 value.serialize(self)
440 }
441
442 fn serialize_bool(self, _value: bool) -> Result<Self::Ok> {
443 Err(CanonicalJsonError::InvalidObjectKeyType("bool".to_owned()))
444 }
445
446 fn serialize_i8(self, _value: i8) -> Result<Self::Ok> {
447 Err(CanonicalJsonError::InvalidObjectKeyType("integer".to_owned()))
448 }
449
450 fn serialize_i16(self, _value: i16) -> Result<Self::Ok> {
451 Err(CanonicalJsonError::InvalidObjectKeyType("integer".to_owned()))
452 }
453
454 fn serialize_i32(self, _value: i32) -> Result<Self::Ok> {
455 Err(CanonicalJsonError::InvalidObjectKeyType("integer".to_owned()))
456 }
457
458 fn serialize_i64(self, _value: i64) -> Result<Self::Ok> {
459 Err(CanonicalJsonError::InvalidObjectKeyType("integer".to_owned()))
460 }
461
462 fn serialize_i128(self, _value: i128) -> Result<Self::Ok> {
463 Err(CanonicalJsonError::InvalidObjectKeyType("integer".to_owned()))
464 }
465
466 fn serialize_u8(self, _value: u8) -> Result<Self::Ok> {
467 Err(CanonicalJsonError::InvalidObjectKeyType("integer".to_owned()))
468 }
469
470 fn serialize_u16(self, _value: u16) -> Result<Self::Ok> {
471 Err(CanonicalJsonError::InvalidObjectKeyType("integer".to_owned()))
472 }
473
474 fn serialize_u32(self, _value: u32) -> Result<Self::Ok> {
475 Err(CanonicalJsonError::InvalidObjectKeyType("integer".to_owned()))
476 }
477
478 fn serialize_u64(self, _value: u64) -> Result<Self::Ok> {
479 Err(CanonicalJsonError::InvalidObjectKeyType("integer".to_owned()))
480 }
481
482 fn serialize_u128(self, _value: u128) -> Result<Self::Ok> {
483 Err(CanonicalJsonError::InvalidObjectKeyType("integer".to_owned()))
484 }
485
486 fn serialize_f32(self, _value: f32) -> Result<Self::Ok> {
487 Err(CanonicalJsonError::InvalidType("float".to_owned()))
488 }
489
490 fn serialize_f64(self, _value: f64) -> Result<Self::Ok> {
491 Err(CanonicalJsonError::InvalidType("integer".to_owned()))
492 }
493
494 #[inline]
495 fn serialize_char(self, value: char) -> Result<Self::Ok> {
496 Ok(value.into())
497 }
498
499 #[inline]
500 fn serialize_str(self, value: &str) -> Result<Self::Ok> {
501 Ok(value.to_owned())
502 }
503
504 fn serialize_bytes(self, _value: &[u8]) -> Result<Self::Ok> {
505 Err(CanonicalJsonError::InvalidType("bytes".to_owned()))
506 }
507
508 fn serialize_unit(self) -> Result<Self::Ok> {
509 Err(CanonicalJsonError::InvalidObjectKeyType("()".to_owned()))
510 }
511
512 fn serialize_unit_struct(self, name: &'static str) -> Result<Self::Ok> {
513 Err(CanonicalJsonError::InvalidObjectKeyType(name.to_owned()))
514 }
515
516 fn serialize_newtype_variant<T>(
517 self,
518 name: &'static str,
519 _variant_index: u32,
520 variant: &'static str,
521 _value: &T,
522 ) -> Result<Self::Ok>
523 where
524 T: ?Sized + Serialize,
525 {
526 Err(CanonicalJsonError::InvalidObjectKeyType(format!("{name}::{variant}")))
527 }
528
529 fn serialize_none(self) -> Result<Self::Ok> {
530 Err(CanonicalJsonError::InvalidObjectKeyType("Option".to_owned()))
531 }
532
533 fn serialize_some<T>(self, _value: &T) -> Result<Self::Ok>
534 where
535 T: ?Sized + Serialize,
536 {
537 Err(CanonicalJsonError::InvalidObjectKeyType("Option".to_owned()))
538 }
539
540 fn serialize_seq(self, _len: Option<usize>) -> Result<Self::SerializeSeq> {
541 Err(CanonicalJsonError::InvalidObjectKeyType("sequence".to_owned()))
542 }
543
544 fn serialize_tuple(self, _len: usize) -> Result<Self::SerializeTuple> {
545 Err(CanonicalJsonError::InvalidObjectKeyType("tuple".to_owned()))
546 }
547
548 fn serialize_tuple_struct(
549 self,
550 name: &'static str,
551 _len: usize,
552 ) -> Result<Self::SerializeTupleStruct> {
553 Err(CanonicalJsonError::InvalidObjectKeyType(name.to_owned()))
554 }
555
556 fn serialize_tuple_variant(
557 self,
558 name: &'static str,
559 _variant_index: u32,
560 variant: &'static str,
561 _len: usize,
562 ) -> Result<Self::SerializeTupleVariant> {
563 Err(CanonicalJsonError::InvalidObjectKeyType(format!("{name}::{variant}")))
564 }
565
566 fn serialize_map(self, _len: Option<usize>) -> Result<Self::SerializeMap> {
567 Err(CanonicalJsonError::InvalidObjectKeyType("map".to_owned()))
568 }
569
570 fn serialize_struct(self, name: &'static str, _len: usize) -> Result<Self::SerializeStruct> {
571 Err(CanonicalJsonError::InvalidObjectKeyType(name.to_owned()))
572 }
573
574 fn serialize_struct_variant(
575 self,
576 name: &'static str,
577 _variant_index: u32,
578 variant: &'static str,
579 _len: usize,
580 ) -> Result<Self::SerializeStructVariant> {
581 Err(CanonicalJsonError::InvalidObjectKeyType(format!("{name}::{variant}")))
582 }
583
584 fn collect_str<T>(self, value: &T) -> Result<Self::Ok>
585 where
586 T: ?Sized + fmt::Display,
587 {
588 Ok(value.to_string())
589 }
590}
591
592pub enum SerializeStruct {
597 RawValue(Option<CanonicalJsonValue>),
601
602 Object(SerializeObject),
604}
605
606impl SerializeStruct {
607 const RAW_VALUE_FIELD_NAME: &str = "$serde_json::private::RawValue";
610}
611
612impl serde::ser::SerializeStruct for SerializeStruct {
613 type Ok = CanonicalJsonValue;
614 type Error = CanonicalJsonError;
615
616 fn serialize_field<T>(
617 &mut self,
618 key: &'static str,
619 value: &T,
620 ) -> std::result::Result<(), Self::Error>
621 where
622 T: ?Sized + Serialize,
623 {
624 match self {
625 Self::RawValue(deserialized) => {
626 *deserialized = Some(value.serialize(RawValueSerializer)?);
627 Ok(())
628 }
629 Self::Object(serialize) => {
630 serde::ser::SerializeMap::serialize_entry(serialize, key, value)
631 }
632 }
633 }
634
635 fn end(self) -> std::result::Result<Self::Ok, Self::Error> {
636 match self {
637 Self::RawValue(deserialized) => {
638 Ok(deserialized.expect("RawValue should have been deserialized"))
639 }
640 Self::Object(serialize) => serde::ser::SerializeMap::end(serialize),
641 }
642 }
643}
644
645struct RawValueSerializer;
647
648impl serde::ser::Serializer for RawValueSerializer {
649 type Ok = CanonicalJsonValue;
650 type Error = CanonicalJsonError;
651
652 type SerializeSeq = Impossible<CanonicalJsonValue, CanonicalJsonError>;
653 type SerializeTuple = Impossible<CanonicalJsonValue, CanonicalJsonError>;
654 type SerializeTupleStruct = Impossible<CanonicalJsonValue, CanonicalJsonError>;
655 type SerializeTupleVariant = Impossible<CanonicalJsonValue, CanonicalJsonError>;
656 type SerializeMap = Impossible<CanonicalJsonValue, CanonicalJsonError>;
657 type SerializeStruct = Impossible<CanonicalJsonValue, CanonicalJsonError>;
658 type SerializeStructVariant = Impossible<CanonicalJsonValue, CanonicalJsonError>;
659
660 fn serialize_bool(self, v: bool) -> Result<CanonicalJsonValue> {
661 Err(CanonicalJsonError::InvalidRawValue(serde_json::Error::invalid_type(
662 Unexpected::Bool(v),
663 &"raw value",
664 )))
665 }
666
667 fn serialize_i8(self, v: i8) -> Result<CanonicalJsonValue> {
668 Err(CanonicalJsonError::InvalidRawValue(serde_json::Error::invalid_type(
669 Unexpected::Signed(v.into()),
670 &"raw value",
671 )))
672 }
673
674 fn serialize_i16(self, v: i16) -> Result<CanonicalJsonValue> {
675 Err(CanonicalJsonError::InvalidRawValue(serde_json::Error::invalid_type(
676 Unexpected::Signed(v.into()),
677 &"raw value",
678 )))
679 }
680
681 fn serialize_i32(self, v: i32) -> Result<CanonicalJsonValue> {
682 Err(CanonicalJsonError::InvalidRawValue(serde_json::Error::invalid_type(
683 Unexpected::Signed(v.into()),
684 &"raw value",
685 )))
686 }
687
688 fn serialize_i64(self, v: i64) -> Result<CanonicalJsonValue> {
689 Err(CanonicalJsonError::InvalidRawValue(serde_json::Error::invalid_type(
690 Unexpected::Signed(v),
691 &"raw value",
692 )))
693 }
694
695 fn serialize_u8(self, v: u8) -> Result<CanonicalJsonValue> {
696 Err(CanonicalJsonError::InvalidRawValue(serde_json::Error::invalid_type(
697 Unexpected::Unsigned(v.into()),
698 &"raw value",
699 )))
700 }
701
702 fn serialize_u16(self, v: u16) -> Result<CanonicalJsonValue> {
703 Err(CanonicalJsonError::InvalidRawValue(serde_json::Error::invalid_type(
704 Unexpected::Unsigned(v.into()),
705 &"raw value",
706 )))
707 }
708
709 fn serialize_u32(self, v: u32) -> Result<CanonicalJsonValue> {
710 Err(CanonicalJsonError::InvalidRawValue(serde_json::Error::invalid_type(
711 Unexpected::Unsigned(v.into()),
712 &"raw value",
713 )))
714 }
715
716 fn serialize_u64(self, v: u64) -> Result<CanonicalJsonValue> {
717 Err(CanonicalJsonError::InvalidRawValue(serde_json::Error::invalid_type(
718 Unexpected::Unsigned(v),
719 &"raw value",
720 )))
721 }
722
723 fn serialize_f32(self, v: f32) -> Result<CanonicalJsonValue> {
724 Err(CanonicalJsonError::InvalidRawValue(serde_json::Error::invalid_type(
725 Unexpected::Float(v.into()),
726 &"raw value",
727 )))
728 }
729
730 fn serialize_f64(self, v: f64) -> Result<CanonicalJsonValue> {
731 Err(CanonicalJsonError::InvalidRawValue(serde_json::Error::invalid_type(
732 Unexpected::Float(v),
733 &"raw value",
734 )))
735 }
736
737 fn serialize_char(self, v: char) -> Result<CanonicalJsonValue> {
738 Err(CanonicalJsonError::InvalidRawValue(serde_json::Error::invalid_type(
739 Unexpected::Char(v),
740 &"raw value",
741 )))
742 }
743
744 fn serialize_str(self, value: &str) -> Result<CanonicalJsonValue> {
745 serde_json::from_str(value).map_err(CanonicalJsonError::InvalidRawValue)
746 }
747
748 fn serialize_bytes(self, v: &[u8]) -> Result<CanonicalJsonValue> {
749 Err(CanonicalJsonError::InvalidRawValue(serde_json::Error::invalid_type(
750 Unexpected::Bytes(v),
751 &"raw value",
752 )))
753 }
754
755 fn serialize_none(self) -> Result<CanonicalJsonValue> {
756 Err(CanonicalJsonError::InvalidRawValue(serde_json::Error::invalid_type(
757 Unexpected::Other("`None`"),
758 &"raw value",
759 )))
760 }
761
762 fn serialize_some<T>(self, _v: &T) -> Result<CanonicalJsonValue>
763 where
764 T: ?Sized + Serialize,
765 {
766 Err(CanonicalJsonError::InvalidRawValue(serde_json::Error::invalid_type(
767 Unexpected::Other("`Some(_)`"),
768 &"raw value",
769 )))
770 }
771
772 fn serialize_unit(self) -> Result<CanonicalJsonValue> {
773 Err(CanonicalJsonError::InvalidRawValue(serde_json::Error::invalid_type(
774 Unexpected::Unit,
775 &"raw value",
776 )))
777 }
778
779 fn serialize_unit_struct(self, _name: &'static str) -> Result<CanonicalJsonValue> {
780 Err(CanonicalJsonError::InvalidRawValue(serde_json::Error::invalid_type(
781 Unexpected::Other("unit struct"),
782 &"raw value",
783 )))
784 }
785
786 fn serialize_unit_variant(
787 self,
788 _name: &'static str,
789 _variant_index: u32,
790 _variant: &'static str,
791 ) -> Result<CanonicalJsonValue> {
792 Err(CanonicalJsonError::InvalidRawValue(serde_json::Error::invalid_type(
793 Unexpected::UnitVariant,
794 &"raw value",
795 )))
796 }
797
798 fn serialize_newtype_struct<T>(
799 self,
800 _name: &'static str,
801 _value: &T,
802 ) -> Result<CanonicalJsonValue>
803 where
804 T: ?Sized + Serialize,
805 {
806 Err(CanonicalJsonError::InvalidRawValue(serde_json::Error::invalid_type(
807 Unexpected::NewtypeStruct,
808 &"raw value",
809 )))
810 }
811
812 fn serialize_newtype_variant<T>(
813 self,
814 _name: &'static str,
815 _variant_index: u32,
816 _variant: &'static str,
817 _value: &T,
818 ) -> Result<CanonicalJsonValue>
819 where
820 T: ?Sized + Serialize,
821 {
822 Err(CanonicalJsonError::InvalidRawValue(serde_json::Error::invalid_type(
823 Unexpected::NewtypeVariant,
824 &"raw value",
825 )))
826 }
827
828 fn serialize_seq(self, _len: Option<usize>) -> Result<Self::SerializeSeq> {
829 Err(CanonicalJsonError::InvalidRawValue(serde_json::Error::invalid_type(
830 Unexpected::Seq,
831 &"raw value",
832 )))
833 }
834
835 fn serialize_tuple(self, _len: usize) -> Result<Self::SerializeTuple> {
836 Err(CanonicalJsonError::InvalidRawValue(serde_json::Error::invalid_type(
837 Unexpected::Other("tuple"),
838 &"raw value",
839 )))
840 }
841
842 fn serialize_tuple_struct(
843 self,
844 _name: &'static str,
845 _len: usize,
846 ) -> Result<Self::SerializeTupleStruct> {
847 Err(CanonicalJsonError::InvalidRawValue(serde_json::Error::invalid_type(
848 Unexpected::Other("tuple struct"),
849 &"raw value",
850 )))
851 }
852
853 fn serialize_tuple_variant(
854 self,
855 _name: &'static str,
856 _variant_index: u32,
857 _variant: &'static str,
858 _len: usize,
859 ) -> Result<Self::SerializeTupleVariant> {
860 Err(CanonicalJsonError::InvalidRawValue(serde_json::Error::invalid_type(
861 Unexpected::TupleVariant,
862 &"raw value",
863 )))
864 }
865
866 fn serialize_map(self, _len: Option<usize>) -> Result<Self::SerializeMap> {
867 Err(CanonicalJsonError::InvalidRawValue(serde_json::Error::invalid_type(
868 Unexpected::Map,
869 &"raw value",
870 )))
871 }
872
873 fn serialize_struct(self, _name: &'static str, _len: usize) -> Result<Self::SerializeStruct> {
874 Err(CanonicalJsonError::InvalidRawValue(serde_json::Error::invalid_type(
875 Unexpected::Other("struct"),
876 &"raw value",
877 )))
878 }
879
880 fn serialize_struct_variant(
881 self,
882 _name: &'static str,
883 _variant_index: u32,
884 _variant: &'static str,
885 _len: usize,
886 ) -> Result<Self::SerializeStructVariant> {
887 Err(CanonicalJsonError::InvalidRawValue(serde_json::Error::invalid_type(
888 Unexpected::StructVariant,
889 &"raw value",
890 )))
891 }
892
893 fn collect_str<T>(self, value: &T) -> Result<Self::Ok>
894 where
895 T: ?Sized + fmt::Display,
896 {
897 self.serialize_str(&value.to_string())
898 }
899}