1use crate::error::{Error, ErrorCode, Result};
2use crate::map::Map;
3use crate::value::{to_value, Value};
4use alloc::borrow::ToOwned;
5use alloc::string::{String, ToString};
6use alloc::vec::Vec;
7use core::fmt::Display;
8use core::result;
9use serde::ser::{Impossible, Serialize};
10
11impl Serialize for Value {
12 #[inline]
13 fn serialize<S>(&self, serializer: S) -> result::Result<S::Ok, S::Error>
14 where
15 S: ::serde::Serializer,
16 {
17 match self {
18 Value::Null => serializer.serialize_unit(),
19 Value::Bool(b) => serializer.serialize_bool(*b),
20 Value::Number(n) => n.serialize(serializer),
21 Value::String(s) => serializer.serialize_str(s),
22 Value::Array(v) => v.serialize(serializer),
23 #[cfg(any(feature = "std", feature = "alloc"))]
24 Value::Object(m) => {
25 use serde::ser::SerializeMap;
26 let mut map = tri!(serializer.serialize_map(Some(m.len())));
27 for (k, v) in m {
28 tri!(map.serialize_entry(k, v));
29 }
30 map.end()
31 }
32 #[cfg(not(any(feature = "std", feature = "alloc")))]
33 Value::Object(_) => unreachable!(),
34 }
35 }
36}
37
38pub struct Serializer;
59
60impl serde::Serializer for Serializer {
61 type Ok = Value;
62 type Error = Error;
63
64 type SerializeSeq = SerializeVec;
65 type SerializeTuple = SerializeVec;
66 type SerializeTupleStruct = SerializeVec;
67 type SerializeTupleVariant = SerializeTupleVariant;
68 type SerializeMap = SerializeMap;
69 type SerializeStruct = SerializeMap;
70 type SerializeStructVariant = SerializeStructVariant;
71
72 #[inline]
73 fn serialize_bool(self, value: bool) -> Result<Value> {
74 Ok(Value::Bool(value))
75 }
76
77 #[inline]
78 fn serialize_i8(self, value: i8) -> Result<Value> {
79 self.serialize_i64(value as i64)
80 }
81
82 #[inline]
83 fn serialize_i16(self, value: i16) -> Result<Value> {
84 self.serialize_i64(value as i64)
85 }
86
87 #[inline]
88 fn serialize_i32(self, value: i32) -> Result<Value> {
89 self.serialize_i64(value as i64)
90 }
91
92 fn serialize_i64(self, value: i64) -> Result<Value> {
93 Ok(Value::Number(value.into()))
94 }
95
96 fn serialize_i128(self, value: i128) -> Result<Value> {
97 #[cfg(feature = "arbitrary_precision")]
98 {
99 Ok(Value::Number(value.into()))
100 }
101
102 #[cfg(not(feature = "arbitrary_precision"))]
103 {
104 if let Ok(value) = u64::try_from(value) {
105 Ok(Value::Number(value.into()))
106 } else if let Ok(value) = i64::try_from(value) {
107 Ok(Value::Number(value.into()))
108 } else {
109 Err(Error::syntax(ErrorCode::NumberOutOfRange, 0, 0))
110 }
111 }
112 }
113
114 #[inline]
115 fn serialize_u8(self, value: u8) -> Result<Value> {
116 self.serialize_u64(value as u64)
117 }
118
119 #[inline]
120 fn serialize_u16(self, value: u16) -> Result<Value> {
121 self.serialize_u64(value as u64)
122 }
123
124 #[inline]
125 fn serialize_u32(self, value: u32) -> Result<Value> {
126 self.serialize_u64(value as u64)
127 }
128
129 #[inline]
130 fn serialize_u64(self, value: u64) -> Result<Value> {
131 Ok(Value::Number(value.into()))
132 }
133
134 fn serialize_u128(self, value: u128) -> Result<Value> {
135 #[cfg(feature = "arbitrary_precision")]
136 {
137 Ok(Value::Number(value.into()))
138 }
139
140 #[cfg(not(feature = "arbitrary_precision"))]
141 {
142 if let Ok(value) = u64::try_from(value) {
143 Ok(Value::Number(value.into()))
144 } else {
145 Err(Error::syntax(ErrorCode::NumberOutOfRange, 0, 0))
146 }
147 }
148 }
149
150 #[inline]
151 fn serialize_f32(self, float: f32) -> Result<Value> {
152 Ok(Value::from(float))
153 }
154
155 #[inline]
156 fn serialize_f64(self, float: f64) -> Result<Value> {
157 Ok(Value::from(float))
158 }
159
160 #[inline]
161 fn serialize_char(self, value: char) -> Result<Value> {
162 let mut s = String::new();
163 s.push(value);
164 Ok(Value::String(s))
165 }
166
167 #[inline]
168 fn serialize_str(self, value: &str) -> Result<Value> {
169 Ok(Value::String(value.to_owned()))
170 }
171
172 fn serialize_bytes(self, value: &[u8]) -> Result<Value> {
173 let vec = value.iter().map(|&b| Value::Number(b.into())).collect();
174 Ok(Value::Array(vec))
175 }
176
177 #[inline]
178 fn serialize_unit(self) -> Result<Value> {
179 Ok(Value::Null)
180 }
181
182 #[inline]
183 fn serialize_unit_struct(self, _name: &'static str) -> Result<Value> {
184 self.serialize_unit()
185 }
186
187 #[inline]
188 fn serialize_unit_variant(
189 self,
190 _name: &'static str,
191 _variant_index: u32,
192 variant: &'static str,
193 ) -> Result<Value> {
194 self.serialize_str(variant)
195 }
196
197 #[inline]
198 fn serialize_newtype_struct<T>(self, _name: &'static str, value: &T) -> Result<Value>
199 where
200 T: ?Sized + Serialize,
201 {
202 value.serialize(self)
203 }
204
205 fn serialize_newtype_variant<T>(
206 self,
207 _name: &'static str,
208 _variant_index: u32,
209 variant: &'static str,
210 value: &T,
211 ) -> Result<Value>
212 where
213 T: ?Sized + Serialize,
214 {
215 let mut values = Map::new();
216 values.insert(String::from(variant), tri!(to_value(value)));
217 Ok(Value::Object(values))
218 }
219
220 #[inline]
221 fn serialize_none(self) -> Result<Value> {
222 self.serialize_unit()
223 }
224
225 #[inline]
226 fn serialize_some<T>(self, value: &T) -> Result<Value>
227 where
228 T: ?Sized + Serialize,
229 {
230 value.serialize(self)
231 }
232
233 fn serialize_seq(self, len: Option<usize>) -> Result<Self::SerializeSeq> {
234 Ok(SerializeVec {
235 vec: Vec::with_capacity(len.unwrap_or(0)),
236 })
237 }
238
239 fn serialize_tuple(self, len: usize) -> Result<Self::SerializeTuple> {
240 self.serialize_seq(Some(len))
241 }
242
243 fn serialize_tuple_struct(
244 self,
245 _name: &'static str,
246 len: usize,
247 ) -> Result<Self::SerializeTupleStruct> {
248 self.serialize_seq(Some(len))
249 }
250
251 fn serialize_tuple_variant(
252 self,
253 _name: &'static str,
254 _variant_index: u32,
255 variant: &'static str,
256 len: usize,
257 ) -> Result<Self::SerializeTupleVariant> {
258 Ok(SerializeTupleVariant {
259 name: String::from(variant),
260 vec: Vec::with_capacity(len),
261 })
262 }
263
264 fn serialize_map(self, len: Option<usize>) -> Result<Self::SerializeMap> {
265 Ok(SerializeMap::Map {
266 map: Map::with_capacity(len.unwrap_or(0)),
267 next_key: None,
268 })
269 }
270
271 fn serialize_struct(self, name: &'static str, len: usize) -> Result<Self::SerializeStruct> {
272 match name {
273 #[cfg(feature = "arbitrary_precision")]
274 crate::number::TOKEN => Ok(SerializeMap::Number { out_value: None }),
275 #[cfg(feature = "raw_value")]
276 crate::raw::TOKEN => Ok(SerializeMap::RawValue { out_value: None }),
277 _ => self.serialize_map(Some(len)),
278 }
279 }
280
281 fn serialize_struct_variant(
282 self,
283 _name: &'static str,
284 _variant_index: u32,
285 variant: &'static str,
286 _len: usize,
287 ) -> Result<Self::SerializeStructVariant> {
288 Ok(SerializeStructVariant {
289 name: String::from(variant),
290 map: Map::new(),
291 })
292 }
293
294 fn collect_str<T>(self, value: &T) -> Result<Value>
295 where
296 T: ?Sized + Display,
297 {
298 Ok(Value::String(value.to_string()))
299 }
300}
301
302pub struct SerializeVec {
303 vec: Vec<Value>,
304}
305
306pub struct SerializeTupleVariant {
307 name: String,
308 vec: Vec<Value>,
309}
310
311pub enum SerializeMap {
312 Map {
313 map: Map<String, Value>,
314 next_key: Option<String>,
315 },
316 #[cfg(feature = "arbitrary_precision")]
317 Number { out_value: Option<Value> },
318 #[cfg(feature = "raw_value")]
319 RawValue { out_value: Option<Value> },
320}
321
322pub struct SerializeStructVariant {
323 name: String,
324 map: Map<String, Value>,
325}
326
327impl serde::ser::SerializeSeq for SerializeVec {
328 type Ok = Value;
329 type Error = Error;
330
331 fn serialize_element<T>(&mut self, value: &T) -> Result<()>
332 where
333 T: ?Sized + Serialize,
334 {
335 self.vec.push(tri!(to_value(value)));
336 Ok(())
337 }
338
339 fn end(self) -> Result<Value> {
340 Ok(Value::Array(self.vec))
341 }
342}
343
344impl serde::ser::SerializeTuple for SerializeVec {
345 type Ok = Value;
346 type Error = Error;
347
348 fn serialize_element<T>(&mut self, value: &T) -> Result<()>
349 where
350 T: ?Sized + Serialize,
351 {
352 serde::ser::SerializeSeq::serialize_element(self, value)
353 }
354
355 fn end(self) -> Result<Value> {
356 serde::ser::SerializeSeq::end(self)
357 }
358}
359
360impl serde::ser::SerializeTupleStruct for SerializeVec {
361 type Ok = Value;
362 type Error = Error;
363
364 fn serialize_field<T>(&mut self, value: &T) -> Result<()>
365 where
366 T: ?Sized + Serialize,
367 {
368 serde::ser::SerializeSeq::serialize_element(self, value)
369 }
370
371 fn end(self) -> Result<Value> {
372 serde::ser::SerializeSeq::end(self)
373 }
374}
375
376impl serde::ser::SerializeTupleVariant for SerializeTupleVariant {
377 type Ok = Value;
378 type Error = Error;
379
380 fn serialize_field<T>(&mut self, value: &T) -> Result<()>
381 where
382 T: ?Sized + Serialize,
383 {
384 self.vec.push(tri!(to_value(value)));
385 Ok(())
386 }
387
388 fn end(self) -> Result<Value> {
389 let mut object = Map::new();
390
391 object.insert(self.name, Value::Array(self.vec));
392
393 Ok(Value::Object(object))
394 }
395}
396
397impl serde::ser::SerializeMap for SerializeMap {
398 type Ok = Value;
399 type Error = Error;
400
401 fn serialize_key<T>(&mut self, key: &T) -> Result<()>
402 where
403 T: ?Sized + Serialize,
404 {
405 match self {
406 SerializeMap::Map { next_key, .. } => {
407 *next_key = Some(tri!(key.serialize(MapKeySerializer)));
408 Ok(())
409 }
410 #[cfg(feature = "arbitrary_precision")]
411 SerializeMap::Number { .. } => unreachable!(),
412 #[cfg(feature = "raw_value")]
413 SerializeMap::RawValue { .. } => unreachable!(),
414 }
415 }
416
417 fn serialize_value<T>(&mut self, value: &T) -> Result<()>
418 where
419 T: ?Sized + Serialize,
420 {
421 match self {
422 SerializeMap::Map { map, next_key } => {
423 let key = next_key.take();
424 let key = key.expect("serialize_value called before serialize_key");
427 map.insert(key, tri!(to_value(value)));
428 Ok(())
429 }
430 #[cfg(feature = "arbitrary_precision")]
431 SerializeMap::Number { .. } => unreachable!(),
432 #[cfg(feature = "raw_value")]
433 SerializeMap::RawValue { .. } => unreachable!(),
434 }
435 }
436
437 fn end(self) -> Result<Value> {
438 match self {
439 SerializeMap::Map { map, .. } => Ok(Value::Object(map)),
440 #[cfg(feature = "arbitrary_precision")]
441 SerializeMap::Number { .. } => unreachable!(),
442 #[cfg(feature = "raw_value")]
443 SerializeMap::RawValue { .. } => unreachable!(),
444 }
445 }
446}
447
448struct MapKeySerializer;
449
450fn key_must_be_a_string() -> Error {
451 Error::syntax(ErrorCode::KeyMustBeAString, 0, 0)
452}
453
454fn float_key_must_be_finite() -> Error {
455 Error::syntax(ErrorCode::FloatKeyMustBeFinite, 0, 0)
456}
457
458impl serde::Serializer for MapKeySerializer {
459 type Ok = String;
460 type Error = Error;
461
462 type SerializeSeq = Impossible<String, Error>;
463 type SerializeTuple = Impossible<String, Error>;
464 type SerializeTupleStruct = Impossible<String, Error>;
465 type SerializeTupleVariant = Impossible<String, Error>;
466 type SerializeMap = Impossible<String, Error>;
467 type SerializeStruct = Impossible<String, Error>;
468 type SerializeStructVariant = Impossible<String, Error>;
469
470 #[inline]
471 fn serialize_unit_variant(
472 self,
473 _name: &'static str,
474 _variant_index: u32,
475 variant: &'static str,
476 ) -> Result<String> {
477 Ok(variant.to_owned())
478 }
479
480 #[inline]
481 fn serialize_newtype_struct<T>(self, _name: &'static str, value: &T) -> Result<String>
482 where
483 T: ?Sized + Serialize,
484 {
485 value.serialize(self)
486 }
487
488 fn serialize_bool(self, value: bool) -> Result<String> {
489 Ok(if value { "true" } else { "false" }.to_owned())
490 }
491
492 fn serialize_i8(self, value: i8) -> Result<String> {
493 Ok(itoa::Buffer::new().format(value).to_owned())
494 }
495
496 fn serialize_i16(self, value: i16) -> Result<String> {
497 Ok(itoa::Buffer::new().format(value).to_owned())
498 }
499
500 fn serialize_i32(self, value: i32) -> Result<String> {
501 Ok(itoa::Buffer::new().format(value).to_owned())
502 }
503
504 fn serialize_i64(self, value: i64) -> Result<String> {
505 Ok(itoa::Buffer::new().format(value).to_owned())
506 }
507
508 fn serialize_i128(self, value: i128) -> Result<String> {
509 Ok(itoa::Buffer::new().format(value).to_owned())
510 }
511
512 fn serialize_u8(self, value: u8) -> Result<String> {
513 Ok(itoa::Buffer::new().format(value).to_owned())
514 }
515
516 fn serialize_u16(self, value: u16) -> Result<String> {
517 Ok(itoa::Buffer::new().format(value).to_owned())
518 }
519
520 fn serialize_u32(self, value: u32) -> Result<String> {
521 Ok(itoa::Buffer::new().format(value).to_owned())
522 }
523
524 fn serialize_u64(self, value: u64) -> Result<String> {
525 Ok(itoa::Buffer::new().format(value).to_owned())
526 }
527
528 fn serialize_u128(self, value: u128) -> Result<String> {
529 Ok(itoa::Buffer::new().format(value).to_owned())
530 }
531
532 fn serialize_f32(self, value: f32) -> Result<String> {
533 if value.is_finite() {
534 Ok(ryu::Buffer::new().format_finite(value).to_owned())
535 } else {
536 Err(float_key_must_be_finite())
537 }
538 }
539
540 fn serialize_f64(self, value: f64) -> Result<String> {
541 if value.is_finite() {
542 Ok(ryu::Buffer::new().format_finite(value).to_owned())
543 } else {
544 Err(float_key_must_be_finite())
545 }
546 }
547
548 #[inline]
549 fn serialize_char(self, value: char) -> Result<String> {
550 Ok({
551 let mut s = String::new();
552 s.push(value);
553 s
554 })
555 }
556
557 #[inline]
558 fn serialize_str(self, value: &str) -> Result<String> {
559 Ok(value.to_owned())
560 }
561
562 fn serialize_bytes(self, _value: &[u8]) -> Result<String> {
563 Err(key_must_be_a_string())
564 }
565
566 fn serialize_unit(self) -> Result<String> {
567 Err(key_must_be_a_string())
568 }
569
570 fn serialize_unit_struct(self, _name: &'static str) -> Result<String> {
571 Err(key_must_be_a_string())
572 }
573
574 fn serialize_newtype_variant<T>(
575 self,
576 _name: &'static str,
577 _variant_index: u32,
578 _variant: &'static str,
579 _value: &T,
580 ) -> Result<String>
581 where
582 T: ?Sized + Serialize,
583 {
584 Err(key_must_be_a_string())
585 }
586
587 fn serialize_none(self) -> Result<String> {
588 Err(key_must_be_a_string())
589 }
590
591 fn serialize_some<T>(self, _value: &T) -> Result<String>
592 where
593 T: ?Sized + Serialize,
594 {
595 Err(key_must_be_a_string())
596 }
597
598 fn serialize_seq(self, _len: Option<usize>) -> Result<Self::SerializeSeq> {
599 Err(key_must_be_a_string())
600 }
601
602 fn serialize_tuple(self, _len: usize) -> Result<Self::SerializeTuple> {
603 Err(key_must_be_a_string())
604 }
605
606 fn serialize_tuple_struct(
607 self,
608 _name: &'static str,
609 _len: usize,
610 ) -> Result<Self::SerializeTupleStruct> {
611 Err(key_must_be_a_string())
612 }
613
614 fn serialize_tuple_variant(
615 self,
616 _name: &'static str,
617 _variant_index: u32,
618 _variant: &'static str,
619 _len: usize,
620 ) -> Result<Self::SerializeTupleVariant> {
621 Err(key_must_be_a_string())
622 }
623
624 fn serialize_map(self, _len: Option<usize>) -> Result<Self::SerializeMap> {
625 Err(key_must_be_a_string())
626 }
627
628 fn serialize_struct(self, _name: &'static str, _len: usize) -> Result<Self::SerializeStruct> {
629 Err(key_must_be_a_string())
630 }
631
632 fn serialize_struct_variant(
633 self,
634 _name: &'static str,
635 _variant_index: u32,
636 _variant: &'static str,
637 _len: usize,
638 ) -> Result<Self::SerializeStructVariant> {
639 Err(key_must_be_a_string())
640 }
641
642 fn collect_str<T>(self, value: &T) -> Result<String>
643 where
644 T: ?Sized + Display,
645 {
646 Ok(value.to_string())
647 }
648}
649
650impl serde::ser::SerializeStruct for SerializeMap {
651 type Ok = Value;
652 type Error = Error;
653
654 fn serialize_field<T>(&mut self, key: &'static str, value: &T) -> Result<()>
655 where
656 T: ?Sized + Serialize,
657 {
658 match self {
659 SerializeMap::Map { .. } => serde::ser::SerializeMap::serialize_entry(self, key, value),
660 #[cfg(feature = "arbitrary_precision")]
661 SerializeMap::Number { out_value } => {
662 if key == crate::number::TOKEN {
663 *out_value = Some(tri!(value.serialize(NumberValueEmitter)));
664 Ok(())
665 } else {
666 Err(invalid_number())
667 }
668 }
669 #[cfg(feature = "raw_value")]
670 SerializeMap::RawValue { out_value } => {
671 if key == crate::raw::TOKEN {
672 *out_value = Some(tri!(value.serialize(RawValueEmitter)));
673 Ok(())
674 } else {
675 Err(invalid_raw_value())
676 }
677 }
678 }
679 }
680
681 fn end(self) -> Result<Value> {
682 match self {
683 SerializeMap::Map { .. } => serde::ser::SerializeMap::end(self),
684 #[cfg(feature = "arbitrary_precision")]
685 SerializeMap::Number { out_value, .. } => {
686 Ok(out_value.expect("number value was not emitted"))
687 }
688 #[cfg(feature = "raw_value")]
689 SerializeMap::RawValue { out_value, .. } => {
690 Ok(out_value.expect("raw value was not emitted"))
691 }
692 }
693 }
694}
695
696impl serde::ser::SerializeStructVariant for SerializeStructVariant {
697 type Ok = Value;
698 type Error = Error;
699
700 fn serialize_field<T>(&mut self, key: &'static str, value: &T) -> Result<()>
701 where
702 T: ?Sized + Serialize,
703 {
704 self.map.insert(String::from(key), tri!(to_value(value)));
705 Ok(())
706 }
707
708 fn end(self) -> Result<Value> {
709 let mut object = Map::new();
710
711 object.insert(self.name, Value::Object(self.map));
712
713 Ok(Value::Object(object))
714 }
715}
716
717#[cfg(feature = "arbitrary_precision")]
718struct NumberValueEmitter;
719
720#[cfg(feature = "arbitrary_precision")]
721fn invalid_number() -> Error {
722 Error::syntax(ErrorCode::InvalidNumber, 0, 0)
723}
724
725#[cfg(feature = "arbitrary_precision")]
726impl serde::ser::Serializer for NumberValueEmitter {
727 type Ok = Value;
728 type Error = Error;
729
730 type SerializeSeq = Impossible<Value, Error>;
731 type SerializeTuple = Impossible<Value, Error>;
732 type SerializeTupleStruct = Impossible<Value, Error>;
733 type SerializeTupleVariant = Impossible<Value, Error>;
734 type SerializeMap = Impossible<Value, Error>;
735 type SerializeStruct = Impossible<Value, Error>;
736 type SerializeStructVariant = Impossible<Value, Error>;
737
738 fn serialize_bool(self, _v: bool) -> Result<Value> {
739 Err(invalid_number())
740 }
741
742 fn serialize_i8(self, _v: i8) -> Result<Value> {
743 Err(invalid_number())
744 }
745
746 fn serialize_i16(self, _v: i16) -> Result<Value> {
747 Err(invalid_number())
748 }
749
750 fn serialize_i32(self, _v: i32) -> Result<Value> {
751 Err(invalid_number())
752 }
753
754 fn serialize_i64(self, _v: i64) -> Result<Value> {
755 Err(invalid_number())
756 }
757
758 fn serialize_u8(self, _v: u8) -> Result<Value> {
759 Err(invalid_number())
760 }
761
762 fn serialize_u16(self, _v: u16) -> Result<Value> {
763 Err(invalid_number())
764 }
765
766 fn serialize_u32(self, _v: u32) -> Result<Value> {
767 Err(invalid_number())
768 }
769
770 fn serialize_u64(self, _v: u64) -> Result<Value> {
771 Err(invalid_number())
772 }
773
774 fn serialize_f32(self, _v: f32) -> Result<Value> {
775 Err(invalid_number())
776 }
777
778 fn serialize_f64(self, _v: f64) -> Result<Value> {
779 Err(invalid_number())
780 }
781
782 fn serialize_char(self, _v: char) -> Result<Value> {
783 Err(invalid_number())
784 }
785
786 fn serialize_str(self, value: &str) -> Result<Value> {
787 let n = tri!(value.to_owned().parse());
788 Ok(Value::Number(n))
789 }
790
791 fn serialize_bytes(self, _value: &[u8]) -> Result<Value> {
792 Err(invalid_number())
793 }
794
795 fn serialize_none(self) -> Result<Value> {
796 Err(invalid_number())
797 }
798
799 fn serialize_some<T>(self, _value: &T) -> Result<Value>
800 where
801 T: ?Sized + Serialize,
802 {
803 Err(invalid_number())
804 }
805
806 fn serialize_unit(self) -> Result<Value> {
807 Err(invalid_number())
808 }
809
810 fn serialize_unit_struct(self, _name: &'static str) -> Result<Value> {
811 Err(invalid_number())
812 }
813
814 fn serialize_unit_variant(
815 self,
816 _name: &'static str,
817 _variant_index: u32,
818 _variant: &'static str,
819 ) -> Result<Value> {
820 Err(invalid_number())
821 }
822
823 fn serialize_newtype_struct<T>(self, _name: &'static str, _value: &T) -> Result<Value>
824 where
825 T: ?Sized + Serialize,
826 {
827 Err(invalid_number())
828 }
829
830 fn serialize_newtype_variant<T>(
831 self,
832 _name: &'static str,
833 _variant_index: u32,
834 _variant: &'static str,
835 _value: &T,
836 ) -> Result<Value>
837 where
838 T: ?Sized + Serialize,
839 {
840 Err(invalid_number())
841 }
842
843 fn serialize_seq(self, _len: Option<usize>) -> Result<Self::SerializeSeq> {
844 Err(invalid_number())
845 }
846
847 fn serialize_tuple(self, _len: usize) -> Result<Self::SerializeTuple> {
848 Err(invalid_number())
849 }
850
851 fn serialize_tuple_struct(
852 self,
853 _name: &'static str,
854 _len: usize,
855 ) -> Result<Self::SerializeTupleStruct> {
856 Err(invalid_number())
857 }
858
859 fn serialize_tuple_variant(
860 self,
861 _name: &'static str,
862 _variant_index: u32,
863 _variant: &'static str,
864 _len: usize,
865 ) -> Result<Self::SerializeTupleVariant> {
866 Err(invalid_number())
867 }
868
869 fn serialize_map(self, _len: Option<usize>) -> Result<Self::SerializeMap> {
870 Err(invalid_number())
871 }
872
873 fn serialize_struct(self, _name: &'static str, _len: usize) -> Result<Self::SerializeStruct> {
874 Err(invalid_number())
875 }
876
877 fn serialize_struct_variant(
878 self,
879 _name: &'static str,
880 _variant_index: u32,
881 _variant: &'static str,
882 _len: usize,
883 ) -> Result<Self::SerializeStructVariant> {
884 Err(invalid_number())
885 }
886}
887
888#[cfg(feature = "raw_value")]
889struct RawValueEmitter;
890
891#[cfg(feature = "raw_value")]
892fn invalid_raw_value() -> Error {
893 Error::syntax(ErrorCode::ExpectedSomeValue, 0, 0)
894}
895
896#[cfg(feature = "raw_value")]
897impl serde::ser::Serializer for RawValueEmitter {
898 type Ok = Value;
899 type Error = Error;
900
901 type SerializeSeq = Impossible<Value, Error>;
902 type SerializeTuple = Impossible<Value, Error>;
903 type SerializeTupleStruct = Impossible<Value, Error>;
904 type SerializeTupleVariant = Impossible<Value, Error>;
905 type SerializeMap = Impossible<Value, Error>;
906 type SerializeStruct = Impossible<Value, Error>;
907 type SerializeStructVariant = Impossible<Value, Error>;
908
909 fn serialize_bool(self, _v: bool) -> Result<Value> {
910 Err(invalid_raw_value())
911 }
912
913 fn serialize_i8(self, _v: i8) -> Result<Value> {
914 Err(invalid_raw_value())
915 }
916
917 fn serialize_i16(self, _v: i16) -> Result<Value> {
918 Err(invalid_raw_value())
919 }
920
921 fn serialize_i32(self, _v: i32) -> Result<Value> {
922 Err(invalid_raw_value())
923 }
924
925 fn serialize_i64(self, _v: i64) -> Result<Value> {
926 Err(invalid_raw_value())
927 }
928
929 fn serialize_u8(self, _v: u8) -> Result<Value> {
930 Err(invalid_raw_value())
931 }
932
933 fn serialize_u16(self, _v: u16) -> Result<Value> {
934 Err(invalid_raw_value())
935 }
936
937 fn serialize_u32(self, _v: u32) -> Result<Value> {
938 Err(invalid_raw_value())
939 }
940
941 fn serialize_u64(self, _v: u64) -> Result<Value> {
942 Err(invalid_raw_value())
943 }
944
945 fn serialize_f32(self, _v: f32) -> Result<Value> {
946 Err(invalid_raw_value())
947 }
948
949 fn serialize_f64(self, _v: f64) -> Result<Value> {
950 Err(invalid_raw_value())
951 }
952
953 fn serialize_char(self, _v: char) -> Result<Value> {
954 Err(invalid_raw_value())
955 }
956
957 fn serialize_str(self, value: &str) -> Result<Value> {
958 crate::from_str(value)
959 }
960
961 fn serialize_bytes(self, _value: &[u8]) -> Result<Value> {
962 Err(invalid_raw_value())
963 }
964
965 fn serialize_none(self) -> Result<Value> {
966 Err(invalid_raw_value())
967 }
968
969 fn serialize_some<T>(self, _value: &T) -> Result<Value>
970 where
971 T: ?Sized + Serialize,
972 {
973 Err(invalid_raw_value())
974 }
975
976 fn serialize_unit(self) -> Result<Value> {
977 Err(invalid_raw_value())
978 }
979
980 fn serialize_unit_struct(self, _name: &'static str) -> Result<Value> {
981 Err(invalid_raw_value())
982 }
983
984 fn serialize_unit_variant(
985 self,
986 _name: &'static str,
987 _variant_index: u32,
988 _variant: &'static str,
989 ) -> Result<Value> {
990 Err(invalid_raw_value())
991 }
992
993 fn serialize_newtype_struct<T>(self, _name: &'static str, _value: &T) -> Result<Value>
994 where
995 T: ?Sized + Serialize,
996 {
997 Err(invalid_raw_value())
998 }
999
1000 fn serialize_newtype_variant<T>(
1001 self,
1002 _name: &'static str,
1003 _variant_index: u32,
1004 _variant: &'static str,
1005 _value: &T,
1006 ) -> Result<Value>
1007 where
1008 T: ?Sized + Serialize,
1009 {
1010 Err(invalid_raw_value())
1011 }
1012
1013 fn serialize_seq(self, _len: Option<usize>) -> Result<Self::SerializeSeq> {
1014 Err(invalid_raw_value())
1015 }
1016
1017 fn serialize_tuple(self, _len: usize) -> Result<Self::SerializeTuple> {
1018 Err(invalid_raw_value())
1019 }
1020
1021 fn serialize_tuple_struct(
1022 self,
1023 _name: &'static str,
1024 _len: usize,
1025 ) -> Result<Self::SerializeTupleStruct> {
1026 Err(invalid_raw_value())
1027 }
1028
1029 fn serialize_tuple_variant(
1030 self,
1031 _name: &'static str,
1032 _variant_index: u32,
1033 _variant: &'static str,
1034 _len: usize,
1035 ) -> Result<Self::SerializeTupleVariant> {
1036 Err(invalid_raw_value())
1037 }
1038
1039 fn serialize_map(self, _len: Option<usize>) -> Result<Self::SerializeMap> {
1040 Err(invalid_raw_value())
1041 }
1042
1043 fn serialize_struct(self, _name: &'static str, _len: usize) -> Result<Self::SerializeStruct> {
1044 Err(invalid_raw_value())
1045 }
1046
1047 fn serialize_struct_variant(
1048 self,
1049 _name: &'static str,
1050 _variant_index: u32,
1051 _variant: &'static str,
1052 _len: usize,
1053 ) -> Result<Self::SerializeStructVariant> {
1054 Err(invalid_raw_value())
1055 }
1056
1057 fn collect_str<T>(self, value: &T) -> Result<Self::Ok>
1058 where
1059 T: ?Sized + Display,
1060 {
1061 self.serialize_str(&value.to_string())
1062 }
1063}