1 //! Customizations to use with Serde's `#[serde(with = …)]` attribute. 2 3 /// Serialize/deserialize an enum using a YAML map containing one entry in which 4 /// the key identifies the variant name. 5 /// 6 /// # Example 7 /// 8 /// ``` 9 /// # use serde_derive::{Deserialize, Serialize}; 10 /// use serde::{Deserialize, Serialize}; 11 /// 12 /// #[derive(Serialize, Deserialize, PartialEq, Debug)] 13 /// enum Enum { 14 /// Unit, 15 /// Newtype(usize), 16 /// Tuple(usize, usize), 17 /// Struct { value: usize }, 18 /// } 19 /// 20 /// #[derive(Serialize, Deserialize, PartialEq, Debug)] 21 /// struct Struct { 22 /// #[serde(with = "serde_yaml::with::singleton_map")] 23 /// w: Enum, 24 /// #[serde(with = "serde_yaml::with::singleton_map")] 25 /// x: Enum, 26 /// #[serde(with = "serde_yaml::with::singleton_map")] 27 /// y: Enum, 28 /// #[serde(with = "serde_yaml::with::singleton_map")] 29 /// z: Enum, 30 /// } 31 /// 32 /// fn main() { 33 /// let object = Struct { 34 /// w: Enum::Unit, 35 /// x: Enum::Newtype(1), 36 /// y: Enum::Tuple(1, 1), 37 /// z: Enum::Struct { value: 1 }, 38 /// }; 39 /// 40 /// let yaml = serde_yaml::to_string(&object).unwrap(); 41 /// print!("{}", yaml); 42 /// 43 /// let deserialized: Struct = serde_yaml::from_str(&yaml).unwrap(); 44 /// assert_eq!(object, deserialized); 45 /// } 46 /// ``` 47 /// 48 /// The representation using `singleton_map` on all the fields is: 49 /// 50 /// ```yaml 51 /// w: Unit 52 /// x: 53 /// Newtype: 1 54 /// y: 55 /// Tuple: 56 /// - 1 57 /// - 1 58 /// z: 59 /// Struct: 60 /// value: 1 61 /// ``` 62 /// 63 /// Without `singleton_map`, the default behavior would have been to serialize 64 /// as: 65 /// 66 /// ```yaml 67 /// w: Unit 68 /// x: !Newtype 1 69 /// y: !Tuple 70 /// - 1 71 /// - 1 72 /// z: !Struct 73 /// value: 1 74 /// ``` 75 pub mod singleton_map { 76 use crate::value::{Mapping, Sequence, Value}; 77 use serde::de::{ 78 self, Deserialize, DeserializeSeed, Deserializer, EnumAccess, IgnoredAny, MapAccess, 79 Unexpected, VariantAccess, Visitor, 80 }; 81 use serde::ser::{ 82 self, Serialize, SerializeMap, SerializeStructVariant, SerializeTupleVariant, Serializer, 83 }; 84 use std::fmt::{self, Display}; 85 86 #[allow(missing_docs)] serialize<T, S>(value: &T, serializer: S) -> Result<S::Ok, S::Error> where T: Serialize, S: Serializer,87 pub fn serialize<T, S>(value: &T, serializer: S) -> Result<S::Ok, S::Error> 88 where 89 T: Serialize, 90 S: Serializer, 91 { 92 value.serialize(SingletonMap { 93 delegate: serializer, 94 }) 95 } 96 97 #[allow(missing_docs)] deserialize<'de, T, D>(deserializer: D) -> Result<T, D::Error> where T: Deserialize<'de>, D: Deserializer<'de>,98 pub fn deserialize<'de, T, D>(deserializer: D) -> Result<T, D::Error> 99 where 100 T: Deserialize<'de>, 101 D: Deserializer<'de>, 102 { 103 T::deserialize(SingletonMap { 104 delegate: deserializer, 105 }) 106 } 107 108 struct SingletonMap<D> { 109 delegate: D, 110 } 111 112 impl<D> Serialize for SingletonMap<D> 113 where 114 D: Serialize, 115 { serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: Serializer,116 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> 117 where 118 S: Serializer, 119 { 120 self.delegate.serialize(SingletonMap { 121 delegate: serializer, 122 }) 123 } 124 } 125 126 impl<D> Serializer for SingletonMap<D> 127 where 128 D: Serializer, 129 { 130 type Ok = D::Ok; 131 type Error = D::Error; 132 133 type SerializeSeq = D::SerializeSeq; 134 type SerializeTuple = D::SerializeTuple; 135 type SerializeTupleStruct = D::SerializeTupleStruct; 136 type SerializeTupleVariant = SerializeTupleVariantAsSingletonMap<D::SerializeMap>; 137 type SerializeMap = D::SerializeMap; 138 type SerializeStruct = D::SerializeStruct; 139 type SerializeStructVariant = SerializeStructVariantAsSingletonMap<D::SerializeMap>; 140 serialize_bool(self, v: bool) -> Result<Self::Ok, Self::Error>141 fn serialize_bool(self, v: bool) -> Result<Self::Ok, Self::Error> { 142 self.delegate.serialize_bool(v) 143 } 144 serialize_i8(self, v: i8) -> Result<Self::Ok, Self::Error>145 fn serialize_i8(self, v: i8) -> Result<Self::Ok, Self::Error> { 146 self.delegate.serialize_i8(v) 147 } 148 serialize_i16(self, v: i16) -> Result<Self::Ok, Self::Error>149 fn serialize_i16(self, v: i16) -> Result<Self::Ok, Self::Error> { 150 self.delegate.serialize_i16(v) 151 } 152 serialize_i32(self, v: i32) -> Result<Self::Ok, Self::Error>153 fn serialize_i32(self, v: i32) -> Result<Self::Ok, Self::Error> { 154 self.delegate.serialize_i32(v) 155 } 156 serialize_i64(self, v: i64) -> Result<Self::Ok, Self::Error>157 fn serialize_i64(self, v: i64) -> Result<Self::Ok, Self::Error> { 158 self.delegate.serialize_i64(v) 159 } 160 serialize_i128(self, v: i128) -> Result<Self::Ok, Self::Error>161 fn serialize_i128(self, v: i128) -> Result<Self::Ok, Self::Error> { 162 self.delegate.serialize_i128(v) 163 } 164 serialize_u8(self, v: u8) -> Result<Self::Ok, Self::Error>165 fn serialize_u8(self, v: u8) -> Result<Self::Ok, Self::Error> { 166 self.delegate.serialize_u8(v) 167 } 168 serialize_u16(self, v: u16) -> Result<Self::Ok, Self::Error>169 fn serialize_u16(self, v: u16) -> Result<Self::Ok, Self::Error> { 170 self.delegate.serialize_u16(v) 171 } 172 serialize_u32(self, v: u32) -> Result<Self::Ok, Self::Error>173 fn serialize_u32(self, v: u32) -> Result<Self::Ok, Self::Error> { 174 self.delegate.serialize_u32(v) 175 } 176 serialize_u64(self, v: u64) -> Result<Self::Ok, Self::Error>177 fn serialize_u64(self, v: u64) -> Result<Self::Ok, Self::Error> { 178 self.delegate.serialize_u64(v) 179 } 180 serialize_u128(self, v: u128) -> Result<Self::Ok, Self::Error>181 fn serialize_u128(self, v: u128) -> Result<Self::Ok, Self::Error> { 182 self.delegate.serialize_u128(v) 183 } 184 serialize_f32(self, v: f32) -> Result<Self::Ok, Self::Error>185 fn serialize_f32(self, v: f32) -> Result<Self::Ok, Self::Error> { 186 self.delegate.serialize_f32(v) 187 } 188 serialize_f64(self, v: f64) -> Result<Self::Ok, Self::Error>189 fn serialize_f64(self, v: f64) -> Result<Self::Ok, Self::Error> { 190 self.delegate.serialize_f64(v) 191 } 192 serialize_char(self, v: char) -> Result<Self::Ok, Self::Error>193 fn serialize_char(self, v: char) -> Result<Self::Ok, Self::Error> { 194 self.delegate.serialize_char(v) 195 } 196 serialize_str(self, v: &str) -> Result<Self::Ok, Self::Error>197 fn serialize_str(self, v: &str) -> Result<Self::Ok, Self::Error> { 198 self.delegate.serialize_str(v) 199 } 200 serialize_bytes(self, v: &[u8]) -> Result<Self::Ok, Self::Error>201 fn serialize_bytes(self, v: &[u8]) -> Result<Self::Ok, Self::Error> { 202 self.delegate.serialize_bytes(v) 203 } 204 serialize_unit(self) -> Result<Self::Ok, Self::Error>205 fn serialize_unit(self) -> Result<Self::Ok, Self::Error> { 206 self.delegate.serialize_unit() 207 } 208 serialize_unit_struct(self, name: &'static str) -> Result<Self::Ok, Self::Error>209 fn serialize_unit_struct(self, name: &'static str) -> Result<Self::Ok, Self::Error> { 210 self.delegate.serialize_unit_struct(name) 211 } 212 serialize_unit_variant( self, name: &'static str, variant_index: u32, variant: &'static str, ) -> Result<Self::Ok, Self::Error>213 fn serialize_unit_variant( 214 self, 215 name: &'static str, 216 variant_index: u32, 217 variant: &'static str, 218 ) -> Result<Self::Ok, Self::Error> { 219 self.delegate 220 .serialize_unit_variant(name, variant_index, variant) 221 } 222 serialize_newtype_struct<T>( self, name: &'static str, value: &T, ) -> Result<Self::Ok, Self::Error> where T: ?Sized + Serialize,223 fn serialize_newtype_struct<T>( 224 self, 225 name: &'static str, 226 value: &T, 227 ) -> Result<Self::Ok, Self::Error> 228 where 229 T: ?Sized + Serialize, 230 { 231 self.delegate.serialize_newtype_struct(name, value) 232 } 233 serialize_newtype_variant<T>( self, _name: &'static str, _variant_index: u32, variant: &'static str, value: &T, ) -> Result<Self::Ok, Self::Error> where T: ?Sized + Serialize,234 fn serialize_newtype_variant<T>( 235 self, 236 _name: &'static str, 237 _variant_index: u32, 238 variant: &'static str, 239 value: &T, 240 ) -> Result<Self::Ok, Self::Error> 241 where 242 T: ?Sized + Serialize, 243 { 244 let mut map = self.delegate.serialize_map(Some(1))?; 245 map.serialize_entry(variant, value)?; 246 map.end() 247 } 248 serialize_none(self) -> Result<Self::Ok, Self::Error>249 fn serialize_none(self) -> Result<Self::Ok, Self::Error> { 250 self.delegate.serialize_none() 251 } 252 serialize_some<V>(self, value: &V) -> Result<Self::Ok, Self::Error> where V: ?Sized + Serialize,253 fn serialize_some<V>(self, value: &V) -> Result<Self::Ok, Self::Error> 254 where 255 V: ?Sized + Serialize, 256 { 257 self.delegate 258 .serialize_some(&SingletonMap { delegate: value }) 259 } 260 serialize_seq(self, len: Option<usize>) -> Result<Self::SerializeSeq, Self::Error>261 fn serialize_seq(self, len: Option<usize>) -> Result<Self::SerializeSeq, Self::Error> { 262 self.delegate.serialize_seq(len) 263 } 264 serialize_tuple(self, len: usize) -> Result<Self::SerializeTuple, Self::Error>265 fn serialize_tuple(self, len: usize) -> Result<Self::SerializeTuple, Self::Error> { 266 self.delegate.serialize_tuple(len) 267 } 268 serialize_tuple_struct( self, name: &'static str, len: usize, ) -> Result<Self::SerializeTupleStruct, Self::Error>269 fn serialize_tuple_struct( 270 self, 271 name: &'static str, 272 len: usize, 273 ) -> Result<Self::SerializeTupleStruct, Self::Error> { 274 self.delegate.serialize_tuple_struct(name, len) 275 } 276 serialize_tuple_variant( self, _name: &'static str, _variant_index: u32, variant: &'static str, len: usize, ) -> Result<Self::SerializeTupleVariant, Self::Error>277 fn serialize_tuple_variant( 278 self, 279 _name: &'static str, 280 _variant_index: u32, 281 variant: &'static str, 282 len: usize, 283 ) -> Result<Self::SerializeTupleVariant, Self::Error> { 284 let mut map = self.delegate.serialize_map(Some(1))?; 285 map.serialize_key(variant)?; 286 let sequence = Sequence::with_capacity(len); 287 Ok(SerializeTupleVariantAsSingletonMap { map, sequence }) 288 } 289 serialize_map(self, len: Option<usize>) -> Result<Self::SerializeMap, Self::Error>290 fn serialize_map(self, len: Option<usize>) -> Result<Self::SerializeMap, Self::Error> { 291 self.delegate.serialize_map(len) 292 } 293 serialize_struct( self, name: &'static str, len: usize, ) -> Result<Self::SerializeStruct, Self::Error>294 fn serialize_struct( 295 self, 296 name: &'static str, 297 len: usize, 298 ) -> Result<Self::SerializeStruct, Self::Error> { 299 self.delegate.serialize_struct(name, len) 300 } 301 serialize_struct_variant( self, _name: &'static str, _variant_index: u32, variant: &'static str, len: usize, ) -> Result<Self::SerializeStructVariant, Self::Error>302 fn serialize_struct_variant( 303 self, 304 _name: &'static str, 305 _variant_index: u32, 306 variant: &'static str, 307 len: usize, 308 ) -> Result<Self::SerializeStructVariant, Self::Error> { 309 let mut map = self.delegate.serialize_map(Some(1))?; 310 map.serialize_key(variant)?; 311 let mapping = Mapping::with_capacity(len); 312 Ok(SerializeStructVariantAsSingletonMap { map, mapping }) 313 } 314 collect_str<T>(self, value: &T) -> Result<Self::Ok, Self::Error> where T: ?Sized + Display,315 fn collect_str<T>(self, value: &T) -> Result<Self::Ok, Self::Error> 316 where 317 T: ?Sized + Display, 318 { 319 self.delegate.collect_str(value) 320 } 321 is_human_readable(&self) -> bool322 fn is_human_readable(&self) -> bool { 323 self.delegate.is_human_readable() 324 } 325 } 326 327 struct SerializeTupleVariantAsSingletonMap<M> { 328 map: M, 329 sequence: Sequence, 330 } 331 332 impl<M> SerializeTupleVariant for SerializeTupleVariantAsSingletonMap<M> 333 where 334 M: SerializeMap, 335 { 336 type Ok = M::Ok; 337 type Error = M::Error; 338 serialize_field<T>(&mut self, field: &T) -> Result<(), Self::Error> where T: ?Sized + Serialize,339 fn serialize_field<T>(&mut self, field: &T) -> Result<(), Self::Error> 340 where 341 T: ?Sized + Serialize, 342 { 343 let value = field 344 .serialize(crate::value::Serializer) 345 .map_err(ser::Error::custom)?; 346 self.sequence.push(value); 347 Ok(()) 348 } 349 end(mut self) -> Result<Self::Ok, Self::Error>350 fn end(mut self) -> Result<Self::Ok, Self::Error> { 351 self.map.serialize_value(&self.sequence)?; 352 self.map.end() 353 } 354 } 355 356 struct SerializeStructVariantAsSingletonMap<M> { 357 map: M, 358 mapping: Mapping, 359 } 360 361 impl<M> SerializeStructVariant for SerializeStructVariantAsSingletonMap<M> 362 where 363 M: SerializeMap, 364 { 365 type Ok = M::Ok; 366 type Error = M::Error; 367 serialize_field<T>(&mut self, name: &'static str, field: &T) -> Result<(), Self::Error> where T: ?Sized + Serialize,368 fn serialize_field<T>(&mut self, name: &'static str, field: &T) -> Result<(), Self::Error> 369 where 370 T: ?Sized + Serialize, 371 { 372 let value = field 373 .serialize(crate::value::Serializer) 374 .map_err(ser::Error::custom)?; 375 self.mapping.insert(Value::String(name.to_owned()), value); 376 Ok(()) 377 } 378 end(mut self) -> Result<Self::Ok, Self::Error>379 fn end(mut self) -> Result<Self::Ok, Self::Error> { 380 self.map.serialize_value(&self.mapping)?; 381 self.map.end() 382 } 383 } 384 385 impl<'de, D> Deserializer<'de> for SingletonMap<D> 386 where 387 D: Deserializer<'de>, 388 { 389 type Error = D::Error; 390 deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,391 fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error> 392 where 393 V: Visitor<'de>, 394 { 395 self.delegate.deserialize_any(visitor) 396 } 397 deserialize_bool<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,398 fn deserialize_bool<V>(self, visitor: V) -> Result<V::Value, Self::Error> 399 where 400 V: Visitor<'de>, 401 { 402 self.delegate.deserialize_bool(visitor) 403 } 404 deserialize_i8<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,405 fn deserialize_i8<V>(self, visitor: V) -> Result<V::Value, Self::Error> 406 where 407 V: Visitor<'de>, 408 { 409 self.delegate.deserialize_i8(visitor) 410 } 411 deserialize_i16<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,412 fn deserialize_i16<V>(self, visitor: V) -> Result<V::Value, Self::Error> 413 where 414 V: Visitor<'de>, 415 { 416 self.delegate.deserialize_i16(visitor) 417 } 418 deserialize_i32<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,419 fn deserialize_i32<V>(self, visitor: V) -> Result<V::Value, Self::Error> 420 where 421 V: Visitor<'de>, 422 { 423 self.delegate.deserialize_i32(visitor) 424 } 425 deserialize_i64<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,426 fn deserialize_i64<V>(self, visitor: V) -> Result<V::Value, Self::Error> 427 where 428 V: Visitor<'de>, 429 { 430 self.delegate.deserialize_i64(visitor) 431 } 432 deserialize_i128<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,433 fn deserialize_i128<V>(self, visitor: V) -> Result<V::Value, Self::Error> 434 where 435 V: Visitor<'de>, 436 { 437 self.delegate.deserialize_i128(visitor) 438 } 439 deserialize_u8<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,440 fn deserialize_u8<V>(self, visitor: V) -> Result<V::Value, Self::Error> 441 where 442 V: Visitor<'de>, 443 { 444 self.delegate.deserialize_u8(visitor) 445 } 446 deserialize_u16<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,447 fn deserialize_u16<V>(self, visitor: V) -> Result<V::Value, Self::Error> 448 where 449 V: Visitor<'de>, 450 { 451 self.delegate.deserialize_u16(visitor) 452 } 453 deserialize_u32<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,454 fn deserialize_u32<V>(self, visitor: V) -> Result<V::Value, Self::Error> 455 where 456 V: Visitor<'de>, 457 { 458 self.delegate.deserialize_u32(visitor) 459 } 460 deserialize_u64<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,461 fn deserialize_u64<V>(self, visitor: V) -> Result<V::Value, Self::Error> 462 where 463 V: Visitor<'de>, 464 { 465 self.delegate.deserialize_u64(visitor) 466 } 467 deserialize_u128<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,468 fn deserialize_u128<V>(self, visitor: V) -> Result<V::Value, Self::Error> 469 where 470 V: Visitor<'de>, 471 { 472 self.delegate.deserialize_u128(visitor) 473 } 474 deserialize_f32<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,475 fn deserialize_f32<V>(self, visitor: V) -> Result<V::Value, Self::Error> 476 where 477 V: Visitor<'de>, 478 { 479 self.delegate.deserialize_f32(visitor) 480 } 481 deserialize_f64<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,482 fn deserialize_f64<V>(self, visitor: V) -> Result<V::Value, Self::Error> 483 where 484 V: Visitor<'de>, 485 { 486 self.delegate.deserialize_f64(visitor) 487 } 488 deserialize_char<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,489 fn deserialize_char<V>(self, visitor: V) -> Result<V::Value, Self::Error> 490 where 491 V: Visitor<'de>, 492 { 493 self.delegate.deserialize_char(visitor) 494 } 495 deserialize_str<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,496 fn deserialize_str<V>(self, visitor: V) -> Result<V::Value, Self::Error> 497 where 498 V: Visitor<'de>, 499 { 500 self.delegate.deserialize_str(visitor) 501 } 502 deserialize_string<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,503 fn deserialize_string<V>(self, visitor: V) -> Result<V::Value, Self::Error> 504 where 505 V: Visitor<'de>, 506 { 507 self.delegate.deserialize_string(visitor) 508 } 509 deserialize_bytes<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,510 fn deserialize_bytes<V>(self, visitor: V) -> Result<V::Value, Self::Error> 511 where 512 V: Visitor<'de>, 513 { 514 self.delegate.deserialize_bytes(visitor) 515 } 516 deserialize_byte_buf<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,517 fn deserialize_byte_buf<V>(self, visitor: V) -> Result<V::Value, Self::Error> 518 where 519 V: Visitor<'de>, 520 { 521 self.delegate.deserialize_byte_buf(visitor) 522 } 523 deserialize_option<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,524 fn deserialize_option<V>(self, visitor: V) -> Result<V::Value, Self::Error> 525 where 526 V: Visitor<'de>, 527 { 528 self.delegate.deserialize_option(SingletonMapAsEnum { 529 name: "", 530 delegate: visitor, 531 }) 532 } 533 deserialize_unit<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,534 fn deserialize_unit<V>(self, visitor: V) -> Result<V::Value, Self::Error> 535 where 536 V: Visitor<'de>, 537 { 538 self.delegate.deserialize_unit(visitor) 539 } 540 deserialize_unit_struct<V>( self, name: &'static str, visitor: V, ) -> Result<V::Value, Self::Error> where V: Visitor<'de>,541 fn deserialize_unit_struct<V>( 542 self, 543 name: &'static str, 544 visitor: V, 545 ) -> Result<V::Value, Self::Error> 546 where 547 V: Visitor<'de>, 548 { 549 self.delegate.deserialize_unit_struct(name, visitor) 550 } 551 deserialize_newtype_struct<V>( self, name: &'static str, visitor: V, ) -> Result<V::Value, Self::Error> where V: Visitor<'de>,552 fn deserialize_newtype_struct<V>( 553 self, 554 name: &'static str, 555 visitor: V, 556 ) -> Result<V::Value, Self::Error> 557 where 558 V: Visitor<'de>, 559 { 560 self.delegate.deserialize_newtype_struct(name, visitor) 561 } 562 deserialize_seq<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,563 fn deserialize_seq<V>(self, visitor: V) -> Result<V::Value, Self::Error> 564 where 565 V: Visitor<'de>, 566 { 567 self.delegate.deserialize_seq(visitor) 568 } 569 deserialize_tuple<V>(self, len: usize, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,570 fn deserialize_tuple<V>(self, len: usize, visitor: V) -> Result<V::Value, Self::Error> 571 where 572 V: Visitor<'de>, 573 { 574 self.delegate.deserialize_tuple(len, visitor) 575 } 576 deserialize_tuple_struct<V>( self, name: &'static str, len: usize, visitor: V, ) -> Result<V::Value, Self::Error> where V: Visitor<'de>,577 fn deserialize_tuple_struct<V>( 578 self, 579 name: &'static str, 580 len: usize, 581 visitor: V, 582 ) -> Result<V::Value, Self::Error> 583 where 584 V: Visitor<'de>, 585 { 586 self.delegate.deserialize_tuple_struct(name, len, visitor) 587 } 588 deserialize_map<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,589 fn deserialize_map<V>(self, visitor: V) -> Result<V::Value, Self::Error> 590 where 591 V: Visitor<'de>, 592 { 593 self.delegate.deserialize_map(visitor) 594 } 595 deserialize_struct<V>( self, name: &'static str, fields: &'static [&'static str], visitor: V, ) -> Result<V::Value, Self::Error> where V: Visitor<'de>,596 fn deserialize_struct<V>( 597 self, 598 name: &'static str, 599 fields: &'static [&'static str], 600 visitor: V, 601 ) -> Result<V::Value, Self::Error> 602 where 603 V: Visitor<'de>, 604 { 605 self.delegate.deserialize_struct(name, fields, visitor) 606 } 607 deserialize_enum<V>( self, name: &'static str, _variants: &'static [&'static str], visitor: V, ) -> Result<V::Value, Self::Error> where V: Visitor<'de>,608 fn deserialize_enum<V>( 609 self, 610 name: &'static str, 611 _variants: &'static [&'static str], 612 visitor: V, 613 ) -> Result<V::Value, Self::Error> 614 where 615 V: Visitor<'de>, 616 { 617 self.delegate.deserialize_any(SingletonMapAsEnum { 618 name, 619 delegate: visitor, 620 }) 621 } 622 deserialize_identifier<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,623 fn deserialize_identifier<V>(self, visitor: V) -> Result<V::Value, Self::Error> 624 where 625 V: Visitor<'de>, 626 { 627 self.delegate.deserialize_identifier(visitor) 628 } 629 deserialize_ignored_any<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,630 fn deserialize_ignored_any<V>(self, visitor: V) -> Result<V::Value, Self::Error> 631 where 632 V: Visitor<'de>, 633 { 634 self.delegate.deserialize_ignored_any(visitor) 635 } 636 is_human_readable(&self) -> bool637 fn is_human_readable(&self) -> bool { 638 self.delegate.is_human_readable() 639 } 640 } 641 642 struct SingletonMapAsEnum<D> { 643 name: &'static str, 644 delegate: D, 645 } 646 647 impl<'de, V> Visitor<'de> for SingletonMapAsEnum<V> 648 where 649 V: Visitor<'de>, 650 { 651 type Value = V::Value; 652 expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result653 fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { 654 self.delegate.expecting(formatter) 655 } 656 visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: de::Error,657 fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> 658 where 659 E: de::Error, 660 { 661 self.delegate.visit_enum(de::value::StrDeserializer::new(v)) 662 } 663 visit_borrowed_str<E>(self, v: &'de str) -> Result<Self::Value, E> where E: de::Error,664 fn visit_borrowed_str<E>(self, v: &'de str) -> Result<Self::Value, E> 665 where 666 E: de::Error, 667 { 668 self.delegate 669 .visit_enum(de::value::BorrowedStrDeserializer::new(v)) 670 } 671 visit_string<E>(self, v: String) -> Result<Self::Value, E> where E: de::Error,672 fn visit_string<E>(self, v: String) -> Result<Self::Value, E> 673 where 674 E: de::Error, 675 { 676 self.delegate 677 .visit_enum(de::value::StringDeserializer::new(v)) 678 } 679 visit_none<E>(self) -> Result<Self::Value, E> where E: de::Error,680 fn visit_none<E>(self) -> Result<Self::Value, E> 681 where 682 E: de::Error, 683 { 684 self.delegate.visit_none() 685 } 686 visit_some<D>(self, deserializer: D) -> Result<Self::Value, D::Error> where D: Deserializer<'de>,687 fn visit_some<D>(self, deserializer: D) -> Result<Self::Value, D::Error> 688 where 689 D: Deserializer<'de>, 690 { 691 self.delegate.visit_some(SingletonMap { 692 delegate: deserializer, 693 }) 694 } 695 visit_unit<E>(self) -> Result<Self::Value, E> where E: de::Error,696 fn visit_unit<E>(self) -> Result<Self::Value, E> 697 where 698 E: de::Error, 699 { 700 self.delegate.visit_unit() 701 } 702 visit_map<A>(self, map: A) -> Result<Self::Value, A::Error> where A: MapAccess<'de>,703 fn visit_map<A>(self, map: A) -> Result<Self::Value, A::Error> 704 where 705 A: MapAccess<'de>, 706 { 707 self.delegate.visit_enum(SingletonMapAsEnum { 708 name: self.name, 709 delegate: map, 710 }) 711 } 712 } 713 714 impl<'de, D> EnumAccess<'de> for SingletonMapAsEnum<D> 715 where 716 D: MapAccess<'de>, 717 { 718 type Error = D::Error; 719 type Variant = Self; 720 variant_seed<V>(mut self, seed: V) -> Result<(V::Value, Self::Variant), Self::Error> where V: DeserializeSeed<'de>,721 fn variant_seed<V>(mut self, seed: V) -> Result<(V::Value, Self::Variant), Self::Error> 722 where 723 V: DeserializeSeed<'de>, 724 { 725 match self.delegate.next_key_seed(seed)? { 726 Some(value) => Ok((value, self)), 727 None => Err(de::Error::invalid_value( 728 Unexpected::Map, 729 &"map with a single key", 730 )), 731 } 732 } 733 } 734 735 impl<'de, D> VariantAccess<'de> for SingletonMapAsEnum<D> 736 where 737 D: MapAccess<'de>, 738 { 739 type Error = D::Error; 740 unit_variant(self) -> Result<(), Self::Error>741 fn unit_variant(self) -> Result<(), Self::Error> { 742 Err(de::Error::invalid_type(Unexpected::Map, &"unit variant")) 743 } 744 newtype_variant_seed<T>(mut self, seed: T) -> Result<T::Value, Self::Error> where T: DeserializeSeed<'de>,745 fn newtype_variant_seed<T>(mut self, seed: T) -> Result<T::Value, Self::Error> 746 where 747 T: DeserializeSeed<'de>, 748 { 749 let value = self.delegate.next_value_seed(seed)?; 750 match self.delegate.next_key()? { 751 None => Ok(value), 752 Some(IgnoredAny) => Err(de::Error::invalid_value( 753 Unexpected::Map, 754 &"map with a single key", 755 )), 756 } 757 } 758 tuple_variant<V>(mut self, len: usize, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,759 fn tuple_variant<V>(mut self, len: usize, visitor: V) -> Result<V::Value, Self::Error> 760 where 761 V: Visitor<'de>, 762 { 763 let value = self 764 .delegate 765 .next_value_seed(TupleVariantSeed { len, visitor })?; 766 match self.delegate.next_key()? { 767 None => Ok(value), 768 Some(IgnoredAny) => Err(de::Error::invalid_value( 769 Unexpected::Map, 770 &"map with a single key", 771 )), 772 } 773 } 774 struct_variant<V>( mut self, fields: &'static [&'static str], visitor: V, ) -> Result<V::Value, Self::Error> where V: Visitor<'de>,775 fn struct_variant<V>( 776 mut self, 777 fields: &'static [&'static str], 778 visitor: V, 779 ) -> Result<V::Value, Self::Error> 780 where 781 V: Visitor<'de>, 782 { 783 let value = self.delegate.next_value_seed(StructVariantSeed { 784 name: self.name, 785 fields, 786 visitor, 787 })?; 788 match self.delegate.next_key()? { 789 None => Ok(value), 790 Some(IgnoredAny) => Err(de::Error::invalid_value( 791 Unexpected::Map, 792 &"map with a single key", 793 )), 794 } 795 } 796 } 797 798 struct TupleVariantSeed<V> { 799 len: usize, 800 visitor: V, 801 } 802 803 impl<'de, V> DeserializeSeed<'de> for TupleVariantSeed<V> 804 where 805 V: Visitor<'de>, 806 { 807 type Value = V::Value; 808 deserialize<D>(self, deserializer: D) -> Result<Self::Value, D::Error> where D: Deserializer<'de>,809 fn deserialize<D>(self, deserializer: D) -> Result<Self::Value, D::Error> 810 where 811 D: Deserializer<'de>, 812 { 813 deserializer.deserialize_tuple(self.len, self.visitor) 814 } 815 } 816 817 struct StructVariantSeed<V> { 818 name: &'static str, 819 fields: &'static [&'static str], 820 visitor: V, 821 } 822 823 impl<'de, V> DeserializeSeed<'de> for StructVariantSeed<V> 824 where 825 V: Visitor<'de>, 826 { 827 type Value = V::Value; 828 deserialize<D>(self, deserializer: D) -> Result<Self::Value, D::Error> where D: Deserializer<'de>,829 fn deserialize<D>(self, deserializer: D) -> Result<Self::Value, D::Error> 830 where 831 D: Deserializer<'de>, 832 { 833 deserializer.deserialize_struct(self.name, self.fields, self.visitor) 834 } 835 } 836 } 837 838 /// Apply [`singleton_map`] to *all* enums contained within the data structure. 839 /// 840 /// # Example 841 /// 842 /// ``` 843 /// # use serde_derive::{Deserialize, Serialize}; 844 /// use serde::{Deserialize, Serialize}; 845 /// 846 /// #[derive(Serialize, Deserialize, PartialEq, Debug)] 847 /// enum Enum { 848 /// Int(i32), 849 /// } 850 /// 851 /// #[derive(Serialize, Deserialize, PartialEq, Debug)] 852 /// struct Inner { 853 /// a: Enum, 854 /// bs: Vec<Enum>, 855 /// } 856 /// 857 /// #[derive(Serialize, Deserialize, PartialEq, Debug)] 858 /// struct Outer { 859 /// tagged_style: Inner, 860 /// 861 /// #[serde(with = "serde_yaml::with::singleton_map_recursive")] 862 /// singleton_map_style: Inner, 863 /// } 864 /// 865 /// fn main() { 866 /// let object = Outer { 867 /// tagged_style: Inner { 868 /// a: Enum::Int(0), 869 /// bs: vec![Enum::Int(1)], 870 /// }, 871 /// singleton_map_style: Inner { 872 /// a: Enum::Int(2), 873 /// bs: vec![Enum::Int(3)], 874 /// }, 875 /// }; 876 /// 877 /// let yaml = serde_yaml::to_string(&object).unwrap(); 878 /// print!("{}", yaml); 879 /// 880 /// let deserialized: Outer = serde_yaml::from_str(&yaml).unwrap(); 881 /// assert_eq!(object, deserialized); 882 /// } 883 /// ``` 884 /// 885 /// The serialized output is: 886 /// 887 /// ```yaml 888 /// tagged_style: 889 /// a: !Int 0 890 /// bs: 891 /// - !Int 1 892 /// singleton_map_style: 893 /// a: 894 /// Int: 2 895 /// bs: 896 /// - Int: 3 897 /// ``` 898 /// 899 /// This module can also be used for the top-level serializer or deserializer 900 /// call, without `serde(with = …)`, as follows. 901 /// 902 /// ``` 903 /// # use serde_derive::{Deserialize, Serialize}; 904 /// # use serde::{Deserialize, Serialize}; 905 /// # 906 /// # #[derive(Serialize, Deserialize, PartialEq, Debug)] 907 /// # enum Enum { 908 /// # Int(i32), 909 /// # } 910 /// # 911 /// # #[derive(Serialize, Deserialize, PartialEq, Debug)] 912 /// # struct Inner { 913 /// # a: Enum, 914 /// # bs: Vec<Enum>, 915 /// # } 916 /// # 917 /// use std::io::{self, Write}; 918 /// 919 /// fn main() { 920 /// let object = Inner { 921 /// a: Enum::Int(0), 922 /// bs: vec![Enum::Int(1)], 923 /// }; 924 /// 925 /// let mut buf = Vec::new(); 926 /// let mut serializer = serde_yaml::Serializer::new(&mut buf); 927 /// serde_yaml::with::singleton_map_recursive::serialize(&object, &mut serializer).unwrap(); 928 /// io::stdout().write_all(&buf).unwrap(); 929 /// 930 /// let deserializer = serde_yaml::Deserializer::from_slice(&buf); 931 /// let deserialized: Inner = serde_yaml::with::singleton_map_recursive::deserialize(deserializer).unwrap(); 932 /// assert_eq!(object, deserialized); 933 /// } 934 /// ``` 935 pub mod singleton_map_recursive { 936 use crate::value::{Mapping, Sequence, Value}; 937 use serde::de::{ 938 self, Deserialize, DeserializeSeed, Deserializer, EnumAccess, IgnoredAny, MapAccess, 939 SeqAccess, Unexpected, VariantAccess, Visitor, 940 }; 941 use serde::ser::{ 942 self, Serialize, SerializeMap, SerializeSeq, SerializeStruct, SerializeStructVariant, 943 SerializeTuple, SerializeTupleStruct, SerializeTupleVariant, Serializer, 944 }; 945 use std::fmt::{self, Display}; 946 947 #[allow(missing_docs)] serialize<T, S>(value: &T, serializer: S) -> Result<S::Ok, S::Error> where T: Serialize, S: Serializer,948 pub fn serialize<T, S>(value: &T, serializer: S) -> Result<S::Ok, S::Error> 949 where 950 T: Serialize, 951 S: Serializer, 952 { 953 value.serialize(SingletonMapRecursive { 954 delegate: serializer, 955 }) 956 } 957 958 #[allow(missing_docs)] deserialize<'de, T, D>(deserializer: D) -> Result<T, D::Error> where T: Deserialize<'de>, D: Deserializer<'de>,959 pub fn deserialize<'de, T, D>(deserializer: D) -> Result<T, D::Error> 960 where 961 T: Deserialize<'de>, 962 D: Deserializer<'de>, 963 { 964 T::deserialize(SingletonMapRecursive { 965 delegate: deserializer, 966 }) 967 } 968 969 struct SingletonMapRecursive<D> { 970 delegate: D, 971 } 972 973 impl<D> Serialize for SingletonMapRecursive<D> 974 where 975 D: Serialize, 976 { serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: Serializer,977 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> 978 where 979 S: Serializer, 980 { 981 self.delegate.serialize(SingletonMapRecursive { 982 delegate: serializer, 983 }) 984 } 985 } 986 987 impl<D> Serializer for SingletonMapRecursive<D> 988 where 989 D: Serializer, 990 { 991 type Ok = D::Ok; 992 type Error = D::Error; 993 994 type SerializeSeq = SingletonMapRecursive<D::SerializeSeq>; 995 type SerializeTuple = SingletonMapRecursive<D::SerializeTuple>; 996 type SerializeTupleStruct = SingletonMapRecursive<D::SerializeTupleStruct>; 997 type SerializeTupleVariant = SerializeTupleVariantAsSingletonMapRecursive<D::SerializeMap>; 998 type SerializeMap = SingletonMapRecursive<D::SerializeMap>; 999 type SerializeStruct = SingletonMapRecursive<D::SerializeStruct>; 1000 type SerializeStructVariant = 1001 SerializeStructVariantAsSingletonMapRecursive<D::SerializeMap>; 1002 serialize_bool(self, v: bool) -> Result<Self::Ok, Self::Error>1003 fn serialize_bool(self, v: bool) -> Result<Self::Ok, Self::Error> { 1004 self.delegate.serialize_bool(v) 1005 } 1006 serialize_i8(self, v: i8) -> Result<Self::Ok, Self::Error>1007 fn serialize_i8(self, v: i8) -> Result<Self::Ok, Self::Error> { 1008 self.delegate.serialize_i8(v) 1009 } 1010 serialize_i16(self, v: i16) -> Result<Self::Ok, Self::Error>1011 fn serialize_i16(self, v: i16) -> Result<Self::Ok, Self::Error> { 1012 self.delegate.serialize_i16(v) 1013 } 1014 serialize_i32(self, v: i32) -> Result<Self::Ok, Self::Error>1015 fn serialize_i32(self, v: i32) -> Result<Self::Ok, Self::Error> { 1016 self.delegate.serialize_i32(v) 1017 } 1018 serialize_i64(self, v: i64) -> Result<Self::Ok, Self::Error>1019 fn serialize_i64(self, v: i64) -> Result<Self::Ok, Self::Error> { 1020 self.delegate.serialize_i64(v) 1021 } 1022 serialize_i128(self, v: i128) -> Result<Self::Ok, Self::Error>1023 fn serialize_i128(self, v: i128) -> Result<Self::Ok, Self::Error> { 1024 self.delegate.serialize_i128(v) 1025 } 1026 serialize_u8(self, v: u8) -> Result<Self::Ok, Self::Error>1027 fn serialize_u8(self, v: u8) -> Result<Self::Ok, Self::Error> { 1028 self.delegate.serialize_u8(v) 1029 } 1030 serialize_u16(self, v: u16) -> Result<Self::Ok, Self::Error>1031 fn serialize_u16(self, v: u16) -> Result<Self::Ok, Self::Error> { 1032 self.delegate.serialize_u16(v) 1033 } 1034 serialize_u32(self, v: u32) -> Result<Self::Ok, Self::Error>1035 fn serialize_u32(self, v: u32) -> Result<Self::Ok, Self::Error> { 1036 self.delegate.serialize_u32(v) 1037 } 1038 serialize_u64(self, v: u64) -> Result<Self::Ok, Self::Error>1039 fn serialize_u64(self, v: u64) -> Result<Self::Ok, Self::Error> { 1040 self.delegate.serialize_u64(v) 1041 } 1042 serialize_u128(self, v: u128) -> Result<Self::Ok, Self::Error>1043 fn serialize_u128(self, v: u128) -> Result<Self::Ok, Self::Error> { 1044 self.delegate.serialize_u128(v) 1045 } 1046 serialize_f32(self, v: f32) -> Result<Self::Ok, Self::Error>1047 fn serialize_f32(self, v: f32) -> Result<Self::Ok, Self::Error> { 1048 self.delegate.serialize_f32(v) 1049 } 1050 serialize_f64(self, v: f64) -> Result<Self::Ok, Self::Error>1051 fn serialize_f64(self, v: f64) -> Result<Self::Ok, Self::Error> { 1052 self.delegate.serialize_f64(v) 1053 } 1054 serialize_char(self, v: char) -> Result<Self::Ok, Self::Error>1055 fn serialize_char(self, v: char) -> Result<Self::Ok, Self::Error> { 1056 self.delegate.serialize_char(v) 1057 } 1058 serialize_str(self, v: &str) -> Result<Self::Ok, Self::Error>1059 fn serialize_str(self, v: &str) -> Result<Self::Ok, Self::Error> { 1060 self.delegate.serialize_str(v) 1061 } 1062 serialize_bytes(self, v: &[u8]) -> Result<Self::Ok, Self::Error>1063 fn serialize_bytes(self, v: &[u8]) -> Result<Self::Ok, Self::Error> { 1064 self.delegate.serialize_bytes(v) 1065 } 1066 serialize_unit(self) -> Result<Self::Ok, Self::Error>1067 fn serialize_unit(self) -> Result<Self::Ok, Self::Error> { 1068 self.delegate.serialize_unit() 1069 } 1070 serialize_unit_struct(self, name: &'static str) -> Result<Self::Ok, Self::Error>1071 fn serialize_unit_struct(self, name: &'static str) -> Result<Self::Ok, Self::Error> { 1072 self.delegate.serialize_unit_struct(name) 1073 } 1074 serialize_unit_variant( self, name: &'static str, variant_index: u32, variant: &'static str, ) -> Result<Self::Ok, Self::Error>1075 fn serialize_unit_variant( 1076 self, 1077 name: &'static str, 1078 variant_index: u32, 1079 variant: &'static str, 1080 ) -> Result<Self::Ok, Self::Error> { 1081 self.delegate 1082 .serialize_unit_variant(name, variant_index, variant) 1083 } 1084 serialize_newtype_struct<T>( self, name: &'static str, value: &T, ) -> Result<Self::Ok, Self::Error> where T: ?Sized + Serialize,1085 fn serialize_newtype_struct<T>( 1086 self, 1087 name: &'static str, 1088 value: &T, 1089 ) -> Result<Self::Ok, Self::Error> 1090 where 1091 T: ?Sized + Serialize, 1092 { 1093 self.delegate 1094 .serialize_newtype_struct(name, &SingletonMapRecursive { delegate: value }) 1095 } 1096 serialize_newtype_variant<T>( self, _name: &'static str, _variant_index: u32, variant: &'static str, value: &T, ) -> Result<Self::Ok, Self::Error> where T: ?Sized + Serialize,1097 fn serialize_newtype_variant<T>( 1098 self, 1099 _name: &'static str, 1100 _variant_index: u32, 1101 variant: &'static str, 1102 value: &T, 1103 ) -> Result<Self::Ok, Self::Error> 1104 where 1105 T: ?Sized + Serialize, 1106 { 1107 let mut map = self.delegate.serialize_map(Some(1))?; 1108 map.serialize_entry(variant, &SingletonMapRecursive { delegate: value })?; 1109 map.end() 1110 } 1111 serialize_none(self) -> Result<Self::Ok, Self::Error>1112 fn serialize_none(self) -> Result<Self::Ok, Self::Error> { 1113 self.delegate.serialize_none() 1114 } 1115 serialize_some<V>(self, value: &V) -> Result<Self::Ok, Self::Error> where V: ?Sized + Serialize,1116 fn serialize_some<V>(self, value: &V) -> Result<Self::Ok, Self::Error> 1117 where 1118 V: ?Sized + Serialize, 1119 { 1120 self.delegate 1121 .serialize_some(&SingletonMapRecursive { delegate: value }) 1122 } 1123 serialize_seq(self, len: Option<usize>) -> Result<Self::SerializeSeq, Self::Error>1124 fn serialize_seq(self, len: Option<usize>) -> Result<Self::SerializeSeq, Self::Error> { 1125 Ok(SingletonMapRecursive { 1126 delegate: self.delegate.serialize_seq(len)?, 1127 }) 1128 } 1129 serialize_tuple(self, len: usize) -> Result<Self::SerializeTuple, Self::Error>1130 fn serialize_tuple(self, len: usize) -> Result<Self::SerializeTuple, Self::Error> { 1131 Ok(SingletonMapRecursive { 1132 delegate: self.delegate.serialize_tuple(len)?, 1133 }) 1134 } 1135 serialize_tuple_struct( self, name: &'static str, len: usize, ) -> Result<Self::SerializeTupleStruct, Self::Error>1136 fn serialize_tuple_struct( 1137 self, 1138 name: &'static str, 1139 len: usize, 1140 ) -> Result<Self::SerializeTupleStruct, Self::Error> { 1141 Ok(SingletonMapRecursive { 1142 delegate: self.delegate.serialize_tuple_struct(name, len)?, 1143 }) 1144 } 1145 serialize_tuple_variant( self, _name: &'static str, _variant_index: u32, variant: &'static str, len: usize, ) -> Result<Self::SerializeTupleVariant, Self::Error>1146 fn serialize_tuple_variant( 1147 self, 1148 _name: &'static str, 1149 _variant_index: u32, 1150 variant: &'static str, 1151 len: usize, 1152 ) -> Result<Self::SerializeTupleVariant, Self::Error> { 1153 let mut map = self.delegate.serialize_map(Some(1))?; 1154 map.serialize_key(variant)?; 1155 let sequence = Sequence::with_capacity(len); 1156 Ok(SerializeTupleVariantAsSingletonMapRecursive { map, sequence }) 1157 } 1158 serialize_map(self, len: Option<usize>) -> Result<Self::SerializeMap, Self::Error>1159 fn serialize_map(self, len: Option<usize>) -> Result<Self::SerializeMap, Self::Error> { 1160 Ok(SingletonMapRecursive { 1161 delegate: self.delegate.serialize_map(len)?, 1162 }) 1163 } 1164 serialize_struct( self, name: &'static str, len: usize, ) -> Result<Self::SerializeStruct, Self::Error>1165 fn serialize_struct( 1166 self, 1167 name: &'static str, 1168 len: usize, 1169 ) -> Result<Self::SerializeStruct, Self::Error> { 1170 Ok(SingletonMapRecursive { 1171 delegate: self.delegate.serialize_struct(name, len)?, 1172 }) 1173 } 1174 serialize_struct_variant( self, _name: &'static str, _variant_index: u32, variant: &'static str, len: usize, ) -> Result<Self::SerializeStructVariant, Self::Error>1175 fn serialize_struct_variant( 1176 self, 1177 _name: &'static str, 1178 _variant_index: u32, 1179 variant: &'static str, 1180 len: usize, 1181 ) -> Result<Self::SerializeStructVariant, Self::Error> { 1182 let mut map = self.delegate.serialize_map(Some(1))?; 1183 map.serialize_key(variant)?; 1184 let mapping = Mapping::with_capacity(len); 1185 Ok(SerializeStructVariantAsSingletonMapRecursive { map, mapping }) 1186 } 1187 collect_str<T>(self, value: &T) -> Result<Self::Ok, Self::Error> where T: ?Sized + Display,1188 fn collect_str<T>(self, value: &T) -> Result<Self::Ok, Self::Error> 1189 where 1190 T: ?Sized + Display, 1191 { 1192 self.delegate.collect_str(value) 1193 } 1194 is_human_readable(&self) -> bool1195 fn is_human_readable(&self) -> bool { 1196 self.delegate.is_human_readable() 1197 } 1198 } 1199 1200 impl<D> SerializeSeq for SingletonMapRecursive<D> 1201 where 1202 D: SerializeSeq, 1203 { 1204 type Ok = D::Ok; 1205 type Error = D::Error; 1206 serialize_element<T>(&mut self, elem: &T) -> Result<(), Self::Error> where T: ?Sized + ser::Serialize,1207 fn serialize_element<T>(&mut self, elem: &T) -> Result<(), Self::Error> 1208 where 1209 T: ?Sized + ser::Serialize, 1210 { 1211 self.delegate 1212 .serialize_element(&SingletonMapRecursive { delegate: elem }) 1213 } 1214 end(self) -> Result<Self::Ok, Self::Error>1215 fn end(self) -> Result<Self::Ok, Self::Error> { 1216 self.delegate.end() 1217 } 1218 } 1219 1220 impl<D> SerializeTuple for SingletonMapRecursive<D> 1221 where 1222 D: SerializeTuple, 1223 { 1224 type Ok = D::Ok; 1225 type Error = D::Error; 1226 serialize_element<T>(&mut self, elem: &T) -> Result<(), Self::Error> where T: ?Sized + ser::Serialize,1227 fn serialize_element<T>(&mut self, elem: &T) -> Result<(), Self::Error> 1228 where 1229 T: ?Sized + ser::Serialize, 1230 { 1231 self.delegate 1232 .serialize_element(&SingletonMapRecursive { delegate: elem }) 1233 } 1234 end(self) -> Result<Self::Ok, Self::Error>1235 fn end(self) -> Result<Self::Ok, Self::Error> { 1236 self.delegate.end() 1237 } 1238 } 1239 1240 impl<D> SerializeTupleStruct for SingletonMapRecursive<D> 1241 where 1242 D: SerializeTupleStruct, 1243 { 1244 type Ok = D::Ok; 1245 type Error = D::Error; 1246 serialize_field<V>(&mut self, value: &V) -> Result<(), Self::Error> where V: ?Sized + ser::Serialize,1247 fn serialize_field<V>(&mut self, value: &V) -> Result<(), Self::Error> 1248 where 1249 V: ?Sized + ser::Serialize, 1250 { 1251 self.delegate 1252 .serialize_field(&SingletonMapRecursive { delegate: value }) 1253 } 1254 end(self) -> Result<Self::Ok, Self::Error>1255 fn end(self) -> Result<Self::Ok, Self::Error> { 1256 self.delegate.end() 1257 } 1258 } 1259 1260 struct SerializeTupleVariantAsSingletonMapRecursive<M> { 1261 map: M, 1262 sequence: Sequence, 1263 } 1264 1265 impl<M> SerializeTupleVariant for SerializeTupleVariantAsSingletonMapRecursive<M> 1266 where 1267 M: SerializeMap, 1268 { 1269 type Ok = M::Ok; 1270 type Error = M::Error; 1271 serialize_field<T>(&mut self, field: &T) -> Result<(), Self::Error> where T: ?Sized + Serialize,1272 fn serialize_field<T>(&mut self, field: &T) -> Result<(), Self::Error> 1273 where 1274 T: ?Sized + Serialize, 1275 { 1276 let value = field 1277 .serialize(SingletonMapRecursive { 1278 delegate: crate::value::Serializer, 1279 }) 1280 .map_err(ser::Error::custom)?; 1281 self.sequence.push(value); 1282 Ok(()) 1283 } 1284 end(mut self) -> Result<Self::Ok, Self::Error>1285 fn end(mut self) -> Result<Self::Ok, Self::Error> { 1286 self.map.serialize_value(&self.sequence)?; 1287 self.map.end() 1288 } 1289 } 1290 1291 impl<D> SerializeMap for SingletonMapRecursive<D> 1292 where 1293 D: SerializeMap, 1294 { 1295 type Ok = D::Ok; 1296 type Error = D::Error; 1297 serialize_key<T>(&mut self, key: &T) -> Result<(), Self::Error> where T: ?Sized + ser::Serialize,1298 fn serialize_key<T>(&mut self, key: &T) -> Result<(), Self::Error> 1299 where 1300 T: ?Sized + ser::Serialize, 1301 { 1302 self.delegate 1303 .serialize_key(&SingletonMapRecursive { delegate: key }) 1304 } 1305 serialize_value<T>(&mut self, value: &T) -> Result<(), Self::Error> where T: ?Sized + ser::Serialize,1306 fn serialize_value<T>(&mut self, value: &T) -> Result<(), Self::Error> 1307 where 1308 T: ?Sized + ser::Serialize, 1309 { 1310 self.delegate 1311 .serialize_value(&SingletonMapRecursive { delegate: value }) 1312 } 1313 serialize_entry<K, V>(&mut self, key: &K, value: &V) -> Result<(), Self::Error> where K: ?Sized + ser::Serialize, V: ?Sized + ser::Serialize,1314 fn serialize_entry<K, V>(&mut self, key: &K, value: &V) -> Result<(), Self::Error> 1315 where 1316 K: ?Sized + ser::Serialize, 1317 V: ?Sized + ser::Serialize, 1318 { 1319 self.delegate.serialize_entry( 1320 &SingletonMapRecursive { delegate: key }, 1321 &SingletonMapRecursive { delegate: value }, 1322 ) 1323 } 1324 end(self) -> Result<Self::Ok, Self::Error>1325 fn end(self) -> Result<Self::Ok, Self::Error> { 1326 self.delegate.end() 1327 } 1328 } 1329 1330 impl<D> SerializeStruct for SingletonMapRecursive<D> 1331 where 1332 D: SerializeStruct, 1333 { 1334 type Ok = D::Ok; 1335 type Error = D::Error; 1336 serialize_field<V>(&mut self, key: &'static str, value: &V) -> Result<(), Self::Error> where V: ?Sized + ser::Serialize,1337 fn serialize_field<V>(&mut self, key: &'static str, value: &V) -> Result<(), Self::Error> 1338 where 1339 V: ?Sized + ser::Serialize, 1340 { 1341 self.delegate 1342 .serialize_field(key, &SingletonMapRecursive { delegate: value }) 1343 } 1344 end(self) -> Result<Self::Ok, Self::Error>1345 fn end(self) -> Result<Self::Ok, Self::Error> { 1346 self.delegate.end() 1347 } 1348 } 1349 1350 struct SerializeStructVariantAsSingletonMapRecursive<M> { 1351 map: M, 1352 mapping: Mapping, 1353 } 1354 1355 impl<M> SerializeStructVariant for SerializeStructVariantAsSingletonMapRecursive<M> 1356 where 1357 M: SerializeMap, 1358 { 1359 type Ok = M::Ok; 1360 type Error = M::Error; 1361 serialize_field<T>(&mut self, name: &'static str, field: &T) -> Result<(), Self::Error> where T: ?Sized + Serialize,1362 fn serialize_field<T>(&mut self, name: &'static str, field: &T) -> Result<(), Self::Error> 1363 where 1364 T: ?Sized + Serialize, 1365 { 1366 let value = field 1367 .serialize(SingletonMapRecursive { 1368 delegate: crate::value::Serializer, 1369 }) 1370 .map_err(ser::Error::custom)?; 1371 self.mapping.insert(Value::String(name.to_owned()), value); 1372 Ok(()) 1373 } 1374 end(mut self) -> Result<Self::Ok, Self::Error>1375 fn end(mut self) -> Result<Self::Ok, Self::Error> { 1376 self.map.serialize_value(&self.mapping)?; 1377 self.map.end() 1378 } 1379 } 1380 1381 impl<'de, D> Deserializer<'de> for SingletonMapRecursive<D> 1382 where 1383 D: Deserializer<'de>, 1384 { 1385 type Error = D::Error; 1386 deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1387 fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error> 1388 where 1389 V: Visitor<'de>, 1390 { 1391 self.delegate 1392 .deserialize_any(SingletonMapRecursive { delegate: visitor }) 1393 } 1394 deserialize_bool<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1395 fn deserialize_bool<V>(self, visitor: V) -> Result<V::Value, Self::Error> 1396 where 1397 V: Visitor<'de>, 1398 { 1399 self.delegate 1400 .deserialize_bool(SingletonMapRecursive { delegate: visitor }) 1401 } 1402 deserialize_i8<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1403 fn deserialize_i8<V>(self, visitor: V) -> Result<V::Value, Self::Error> 1404 where 1405 V: Visitor<'de>, 1406 { 1407 self.delegate 1408 .deserialize_i8(SingletonMapRecursive { delegate: visitor }) 1409 } 1410 deserialize_i16<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1411 fn deserialize_i16<V>(self, visitor: V) -> Result<V::Value, Self::Error> 1412 where 1413 V: Visitor<'de>, 1414 { 1415 self.delegate 1416 .deserialize_i16(SingletonMapRecursive { delegate: visitor }) 1417 } 1418 deserialize_i32<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1419 fn deserialize_i32<V>(self, visitor: V) -> Result<V::Value, Self::Error> 1420 where 1421 V: Visitor<'de>, 1422 { 1423 self.delegate 1424 .deserialize_i32(SingletonMapRecursive { delegate: visitor }) 1425 } 1426 deserialize_i64<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1427 fn deserialize_i64<V>(self, visitor: V) -> Result<V::Value, Self::Error> 1428 where 1429 V: Visitor<'de>, 1430 { 1431 self.delegate 1432 .deserialize_i64(SingletonMapRecursive { delegate: visitor }) 1433 } 1434 deserialize_i128<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1435 fn deserialize_i128<V>(self, visitor: V) -> Result<V::Value, Self::Error> 1436 where 1437 V: Visitor<'de>, 1438 { 1439 self.delegate 1440 .deserialize_i128(SingletonMapRecursive { delegate: visitor }) 1441 } 1442 deserialize_u8<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1443 fn deserialize_u8<V>(self, visitor: V) -> Result<V::Value, Self::Error> 1444 where 1445 V: Visitor<'de>, 1446 { 1447 self.delegate 1448 .deserialize_u8(SingletonMapRecursive { delegate: visitor }) 1449 } 1450 deserialize_u16<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1451 fn deserialize_u16<V>(self, visitor: V) -> Result<V::Value, Self::Error> 1452 where 1453 V: Visitor<'de>, 1454 { 1455 self.delegate 1456 .deserialize_u16(SingletonMapRecursive { delegate: visitor }) 1457 } 1458 deserialize_u32<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1459 fn deserialize_u32<V>(self, visitor: V) -> Result<V::Value, Self::Error> 1460 where 1461 V: Visitor<'de>, 1462 { 1463 self.delegate 1464 .deserialize_u32(SingletonMapRecursive { delegate: visitor }) 1465 } 1466 deserialize_u64<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1467 fn deserialize_u64<V>(self, visitor: V) -> Result<V::Value, Self::Error> 1468 where 1469 V: Visitor<'de>, 1470 { 1471 self.delegate 1472 .deserialize_u64(SingletonMapRecursive { delegate: visitor }) 1473 } 1474 deserialize_u128<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1475 fn deserialize_u128<V>(self, visitor: V) -> Result<V::Value, Self::Error> 1476 where 1477 V: Visitor<'de>, 1478 { 1479 self.delegate 1480 .deserialize_u128(SingletonMapRecursive { delegate: visitor }) 1481 } 1482 deserialize_f32<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1483 fn deserialize_f32<V>(self, visitor: V) -> Result<V::Value, Self::Error> 1484 where 1485 V: Visitor<'de>, 1486 { 1487 self.delegate 1488 .deserialize_f32(SingletonMapRecursive { delegate: visitor }) 1489 } 1490 deserialize_f64<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1491 fn deserialize_f64<V>(self, visitor: V) -> Result<V::Value, Self::Error> 1492 where 1493 V: Visitor<'de>, 1494 { 1495 self.delegate 1496 .deserialize_f64(SingletonMapRecursive { delegate: visitor }) 1497 } 1498 deserialize_char<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1499 fn deserialize_char<V>(self, visitor: V) -> Result<V::Value, Self::Error> 1500 where 1501 V: Visitor<'de>, 1502 { 1503 self.delegate 1504 .deserialize_char(SingletonMapRecursive { delegate: visitor }) 1505 } 1506 deserialize_str<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1507 fn deserialize_str<V>(self, visitor: V) -> Result<V::Value, Self::Error> 1508 where 1509 V: Visitor<'de>, 1510 { 1511 self.delegate 1512 .deserialize_str(SingletonMapRecursive { delegate: visitor }) 1513 } 1514 deserialize_string<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1515 fn deserialize_string<V>(self, visitor: V) -> Result<V::Value, Self::Error> 1516 where 1517 V: Visitor<'de>, 1518 { 1519 self.delegate 1520 .deserialize_string(SingletonMapRecursive { delegate: visitor }) 1521 } 1522 deserialize_bytes<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1523 fn deserialize_bytes<V>(self, visitor: V) -> Result<V::Value, Self::Error> 1524 where 1525 V: Visitor<'de>, 1526 { 1527 self.delegate 1528 .deserialize_bytes(SingletonMapRecursive { delegate: visitor }) 1529 } 1530 deserialize_byte_buf<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1531 fn deserialize_byte_buf<V>(self, visitor: V) -> Result<V::Value, Self::Error> 1532 where 1533 V: Visitor<'de>, 1534 { 1535 self.delegate 1536 .deserialize_byte_buf(SingletonMapRecursive { delegate: visitor }) 1537 } 1538 deserialize_option<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1539 fn deserialize_option<V>(self, visitor: V) -> Result<V::Value, Self::Error> 1540 where 1541 V: Visitor<'de>, 1542 { 1543 self.delegate 1544 .deserialize_option(SingletonMapRecursiveAsEnum { 1545 name: "", 1546 delegate: visitor, 1547 }) 1548 } 1549 deserialize_unit<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1550 fn deserialize_unit<V>(self, visitor: V) -> Result<V::Value, Self::Error> 1551 where 1552 V: Visitor<'de>, 1553 { 1554 self.delegate 1555 .deserialize_unit(SingletonMapRecursive { delegate: visitor }) 1556 } 1557 deserialize_unit_struct<V>( self, name: &'static str, visitor: V, ) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1558 fn deserialize_unit_struct<V>( 1559 self, 1560 name: &'static str, 1561 visitor: V, 1562 ) -> Result<V::Value, Self::Error> 1563 where 1564 V: Visitor<'de>, 1565 { 1566 self.delegate 1567 .deserialize_unit_struct(name, SingletonMapRecursive { delegate: visitor }) 1568 } 1569 deserialize_newtype_struct<V>( self, name: &'static str, visitor: V, ) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1570 fn deserialize_newtype_struct<V>( 1571 self, 1572 name: &'static str, 1573 visitor: V, 1574 ) -> Result<V::Value, Self::Error> 1575 where 1576 V: Visitor<'de>, 1577 { 1578 self.delegate 1579 .deserialize_newtype_struct(name, SingletonMapRecursive { delegate: visitor }) 1580 } 1581 deserialize_seq<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1582 fn deserialize_seq<V>(self, visitor: V) -> Result<V::Value, Self::Error> 1583 where 1584 V: Visitor<'de>, 1585 { 1586 self.delegate 1587 .deserialize_seq(SingletonMapRecursive { delegate: visitor }) 1588 } 1589 deserialize_tuple<V>(self, len: usize, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1590 fn deserialize_tuple<V>(self, len: usize, visitor: V) -> Result<V::Value, Self::Error> 1591 where 1592 V: Visitor<'de>, 1593 { 1594 self.delegate 1595 .deserialize_tuple(len, SingletonMapRecursive { delegate: visitor }) 1596 } 1597 deserialize_tuple_struct<V>( self, name: &'static str, len: usize, visitor: V, ) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1598 fn deserialize_tuple_struct<V>( 1599 self, 1600 name: &'static str, 1601 len: usize, 1602 visitor: V, 1603 ) -> Result<V::Value, Self::Error> 1604 where 1605 V: Visitor<'de>, 1606 { 1607 self.delegate.deserialize_tuple_struct( 1608 name, 1609 len, 1610 SingletonMapRecursive { delegate: visitor }, 1611 ) 1612 } 1613 deserialize_map<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1614 fn deserialize_map<V>(self, visitor: V) -> Result<V::Value, Self::Error> 1615 where 1616 V: Visitor<'de>, 1617 { 1618 self.delegate 1619 .deserialize_map(SingletonMapRecursive { delegate: visitor }) 1620 } 1621 deserialize_struct<V>( self, name: &'static str, fields: &'static [&'static str], visitor: V, ) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1622 fn deserialize_struct<V>( 1623 self, 1624 name: &'static str, 1625 fields: &'static [&'static str], 1626 visitor: V, 1627 ) -> Result<V::Value, Self::Error> 1628 where 1629 V: Visitor<'de>, 1630 { 1631 self.delegate.deserialize_struct( 1632 name, 1633 fields, 1634 SingletonMapRecursive { delegate: visitor }, 1635 ) 1636 } 1637 deserialize_enum<V>( self, name: &'static str, _variants: &'static [&'static str], visitor: V, ) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1638 fn deserialize_enum<V>( 1639 self, 1640 name: &'static str, 1641 _variants: &'static [&'static str], 1642 visitor: V, 1643 ) -> Result<V::Value, Self::Error> 1644 where 1645 V: Visitor<'de>, 1646 { 1647 self.delegate.deserialize_any(SingletonMapRecursiveAsEnum { 1648 name, 1649 delegate: visitor, 1650 }) 1651 } 1652 deserialize_identifier<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1653 fn deserialize_identifier<V>(self, visitor: V) -> Result<V::Value, Self::Error> 1654 where 1655 V: Visitor<'de>, 1656 { 1657 self.delegate 1658 .deserialize_identifier(SingletonMapRecursive { delegate: visitor }) 1659 } 1660 deserialize_ignored_any<V>(self, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,1661 fn deserialize_ignored_any<V>(self, visitor: V) -> Result<V::Value, Self::Error> 1662 where 1663 V: Visitor<'de>, 1664 { 1665 self.delegate 1666 .deserialize_ignored_any(SingletonMapRecursive { delegate: visitor }) 1667 } 1668 is_human_readable(&self) -> bool1669 fn is_human_readable(&self) -> bool { 1670 self.delegate.is_human_readable() 1671 } 1672 } 1673 1674 impl<'de, V> Visitor<'de> for SingletonMapRecursive<V> 1675 where 1676 V: Visitor<'de>, 1677 { 1678 type Value = V::Value; 1679 expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result1680 fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { 1681 self.delegate.expecting(formatter) 1682 } 1683 visit_bool<E>(self, v: bool) -> Result<Self::Value, E> where E: de::Error,1684 fn visit_bool<E>(self, v: bool) -> Result<Self::Value, E> 1685 where 1686 E: de::Error, 1687 { 1688 self.delegate.visit_bool(v) 1689 } 1690 visit_i8<E>(self, v: i8) -> Result<Self::Value, E> where E: de::Error,1691 fn visit_i8<E>(self, v: i8) -> Result<Self::Value, E> 1692 where 1693 E: de::Error, 1694 { 1695 self.delegate.visit_i8(v) 1696 } 1697 visit_i16<E>(self, v: i16) -> Result<Self::Value, E> where E: de::Error,1698 fn visit_i16<E>(self, v: i16) -> Result<Self::Value, E> 1699 where 1700 E: de::Error, 1701 { 1702 self.delegate.visit_i16(v) 1703 } 1704 visit_i32<E>(self, v: i32) -> Result<Self::Value, E> where E: de::Error,1705 fn visit_i32<E>(self, v: i32) -> Result<Self::Value, E> 1706 where 1707 E: de::Error, 1708 { 1709 self.delegate.visit_i32(v) 1710 } 1711 visit_i64<E>(self, v: i64) -> Result<Self::Value, E> where E: de::Error,1712 fn visit_i64<E>(self, v: i64) -> Result<Self::Value, E> 1713 where 1714 E: de::Error, 1715 { 1716 self.delegate.visit_i64(v) 1717 } 1718 visit_i128<E>(self, v: i128) -> Result<Self::Value, E> where E: de::Error,1719 fn visit_i128<E>(self, v: i128) -> Result<Self::Value, E> 1720 where 1721 E: de::Error, 1722 { 1723 self.delegate.visit_i128(v) 1724 } 1725 visit_u8<E>(self, v: u8) -> Result<Self::Value, E> where E: de::Error,1726 fn visit_u8<E>(self, v: u8) -> Result<Self::Value, E> 1727 where 1728 E: de::Error, 1729 { 1730 self.delegate.visit_u8(v) 1731 } 1732 visit_u16<E>(self, v: u16) -> Result<Self::Value, E> where E: de::Error,1733 fn visit_u16<E>(self, v: u16) -> Result<Self::Value, E> 1734 where 1735 E: de::Error, 1736 { 1737 self.delegate.visit_u16(v) 1738 } 1739 visit_u32<E>(self, v: u32) -> Result<Self::Value, E> where E: de::Error,1740 fn visit_u32<E>(self, v: u32) -> Result<Self::Value, E> 1741 where 1742 E: de::Error, 1743 { 1744 self.delegate.visit_u32(v) 1745 } 1746 visit_u64<E>(self, v: u64) -> Result<Self::Value, E> where E: de::Error,1747 fn visit_u64<E>(self, v: u64) -> Result<Self::Value, E> 1748 where 1749 E: de::Error, 1750 { 1751 self.delegate.visit_u64(v) 1752 } 1753 visit_u128<E>(self, v: u128) -> Result<Self::Value, E> where E: de::Error,1754 fn visit_u128<E>(self, v: u128) -> Result<Self::Value, E> 1755 where 1756 E: de::Error, 1757 { 1758 self.delegate.visit_u128(v) 1759 } 1760 visit_f32<E>(self, v: f32) -> Result<Self::Value, E> where E: de::Error,1761 fn visit_f32<E>(self, v: f32) -> Result<Self::Value, E> 1762 where 1763 E: de::Error, 1764 { 1765 self.delegate.visit_f32(v) 1766 } 1767 visit_f64<E>(self, v: f64) -> Result<Self::Value, E> where E: de::Error,1768 fn visit_f64<E>(self, v: f64) -> Result<Self::Value, E> 1769 where 1770 E: de::Error, 1771 { 1772 self.delegate.visit_f64(v) 1773 } 1774 visit_char<E>(self, v: char) -> Result<Self::Value, E> where E: de::Error,1775 fn visit_char<E>(self, v: char) -> Result<Self::Value, E> 1776 where 1777 E: de::Error, 1778 { 1779 self.delegate.visit_char(v) 1780 } 1781 visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: de::Error,1782 fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> 1783 where 1784 E: de::Error, 1785 { 1786 self.delegate.visit_str(v) 1787 } 1788 visit_borrowed_str<E>(self, v: &'de str) -> Result<Self::Value, E> where E: de::Error,1789 fn visit_borrowed_str<E>(self, v: &'de str) -> Result<Self::Value, E> 1790 where 1791 E: de::Error, 1792 { 1793 self.delegate.visit_borrowed_str(v) 1794 } 1795 visit_string<E>(self, v: String) -> Result<Self::Value, E> where E: de::Error,1796 fn visit_string<E>(self, v: String) -> Result<Self::Value, E> 1797 where 1798 E: de::Error, 1799 { 1800 self.delegate.visit_string(v) 1801 } 1802 visit_bytes<E>(self, v: &[u8]) -> Result<Self::Value, E> where E: de::Error,1803 fn visit_bytes<E>(self, v: &[u8]) -> Result<Self::Value, E> 1804 where 1805 E: de::Error, 1806 { 1807 self.delegate.visit_bytes(v) 1808 } 1809 visit_borrowed_bytes<E>(self, v: &'de [u8]) -> Result<Self::Value, E> where E: de::Error,1810 fn visit_borrowed_bytes<E>(self, v: &'de [u8]) -> Result<Self::Value, E> 1811 where 1812 E: de::Error, 1813 { 1814 self.delegate.visit_borrowed_bytes(v) 1815 } 1816 visit_byte_buf<E>(self, v: Vec<u8>) -> Result<Self::Value, E> where E: de::Error,1817 fn visit_byte_buf<E>(self, v: Vec<u8>) -> Result<Self::Value, E> 1818 where 1819 E: de::Error, 1820 { 1821 self.delegate.visit_byte_buf(v) 1822 } 1823 visit_none<E>(self) -> Result<Self::Value, E> where E: de::Error,1824 fn visit_none<E>(self) -> Result<Self::Value, E> 1825 where 1826 E: de::Error, 1827 { 1828 self.delegate.visit_none() 1829 } 1830 visit_some<D>(self, deserializer: D) -> Result<Self::Value, D::Error> where D: Deserializer<'de>,1831 fn visit_some<D>(self, deserializer: D) -> Result<Self::Value, D::Error> 1832 where 1833 D: Deserializer<'de>, 1834 { 1835 self.delegate.visit_some(SingletonMapRecursive { 1836 delegate: deserializer, 1837 }) 1838 } 1839 visit_unit<E>(self) -> Result<Self::Value, E> where E: de::Error,1840 fn visit_unit<E>(self) -> Result<Self::Value, E> 1841 where 1842 E: de::Error, 1843 { 1844 self.delegate.visit_unit() 1845 } 1846 visit_newtype_struct<D>(self, deserializer: D) -> Result<Self::Value, D::Error> where D: Deserializer<'de>,1847 fn visit_newtype_struct<D>(self, deserializer: D) -> Result<Self::Value, D::Error> 1848 where 1849 D: Deserializer<'de>, 1850 { 1851 self.delegate.visit_newtype_struct(SingletonMapRecursive { 1852 delegate: deserializer, 1853 }) 1854 } 1855 visit_seq<A>(self, seq: A) -> Result<Self::Value, A::Error> where A: SeqAccess<'de>,1856 fn visit_seq<A>(self, seq: A) -> Result<Self::Value, A::Error> 1857 where 1858 A: SeqAccess<'de>, 1859 { 1860 self.delegate 1861 .visit_seq(SingletonMapRecursive { delegate: seq }) 1862 } 1863 visit_map<A>(self, map: A) -> Result<Self::Value, A::Error> where A: MapAccess<'de>,1864 fn visit_map<A>(self, map: A) -> Result<Self::Value, A::Error> 1865 where 1866 A: MapAccess<'de>, 1867 { 1868 self.delegate 1869 .visit_map(SingletonMapRecursive { delegate: map }) 1870 } 1871 } 1872 1873 impl<'de, T> DeserializeSeed<'de> for SingletonMapRecursive<T> 1874 where 1875 T: DeserializeSeed<'de>, 1876 { 1877 type Value = T::Value; 1878 deserialize<D>(self, deserializer: D) -> Result<Self::Value, D::Error> where D: Deserializer<'de>,1879 fn deserialize<D>(self, deserializer: D) -> Result<Self::Value, D::Error> 1880 where 1881 D: Deserializer<'de>, 1882 { 1883 self.delegate.deserialize(SingletonMapRecursive { 1884 delegate: deserializer, 1885 }) 1886 } 1887 } 1888 1889 impl<'de, S> SeqAccess<'de> for SingletonMapRecursive<S> 1890 where 1891 S: SeqAccess<'de>, 1892 { 1893 type Error = S::Error; 1894 next_element_seed<T>(&mut self, seed: T) -> Result<Option<T::Value>, Self::Error> where T: DeserializeSeed<'de>,1895 fn next_element_seed<T>(&mut self, seed: T) -> Result<Option<T::Value>, Self::Error> 1896 where 1897 T: DeserializeSeed<'de>, 1898 { 1899 self.delegate 1900 .next_element_seed(SingletonMapRecursive { delegate: seed }) 1901 } 1902 } 1903 1904 impl<'de, M> MapAccess<'de> for SingletonMapRecursive<M> 1905 where 1906 M: MapAccess<'de>, 1907 { 1908 type Error = M::Error; 1909 next_key_seed<K>(&mut self, seed: K) -> Result<Option<K::Value>, Self::Error> where K: DeserializeSeed<'de>,1910 fn next_key_seed<K>(&mut self, seed: K) -> Result<Option<K::Value>, Self::Error> 1911 where 1912 K: DeserializeSeed<'de>, 1913 { 1914 self.delegate 1915 .next_key_seed(SingletonMapRecursive { delegate: seed }) 1916 } 1917 next_value_seed<V>(&mut self, seed: V) -> Result<V::Value, Self::Error> where V: DeserializeSeed<'de>,1918 fn next_value_seed<V>(&mut self, seed: V) -> Result<V::Value, Self::Error> 1919 where 1920 V: DeserializeSeed<'de>, 1921 { 1922 self.delegate 1923 .next_value_seed(SingletonMapRecursive { delegate: seed }) 1924 } 1925 } 1926 1927 struct SingletonMapRecursiveAsEnum<D> { 1928 name: &'static str, 1929 delegate: D, 1930 } 1931 1932 impl<'de, V> Visitor<'de> for SingletonMapRecursiveAsEnum<V> 1933 where 1934 V: Visitor<'de>, 1935 { 1936 type Value = V::Value; 1937 expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result1938 fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { 1939 self.delegate.expecting(formatter) 1940 } 1941 visit_str<E>(self, v: &str) -> Result<Self::Value, E> where E: de::Error,1942 fn visit_str<E>(self, v: &str) -> Result<Self::Value, E> 1943 where 1944 E: de::Error, 1945 { 1946 self.delegate.visit_enum(de::value::StrDeserializer::new(v)) 1947 } 1948 visit_borrowed_str<E>(self, v: &'de str) -> Result<Self::Value, E> where E: de::Error,1949 fn visit_borrowed_str<E>(self, v: &'de str) -> Result<Self::Value, E> 1950 where 1951 E: de::Error, 1952 { 1953 self.delegate 1954 .visit_enum(de::value::BorrowedStrDeserializer::new(v)) 1955 } 1956 visit_string<E>(self, v: String) -> Result<Self::Value, E> where E: de::Error,1957 fn visit_string<E>(self, v: String) -> Result<Self::Value, E> 1958 where 1959 E: de::Error, 1960 { 1961 self.delegate 1962 .visit_enum(de::value::StringDeserializer::new(v)) 1963 } 1964 visit_none<E>(self) -> Result<Self::Value, E> where E: de::Error,1965 fn visit_none<E>(self) -> Result<Self::Value, E> 1966 where 1967 E: de::Error, 1968 { 1969 self.delegate.visit_none() 1970 } 1971 visit_some<D>(self, deserializer: D) -> Result<Self::Value, D::Error> where D: Deserializer<'de>,1972 fn visit_some<D>(self, deserializer: D) -> Result<Self::Value, D::Error> 1973 where 1974 D: Deserializer<'de>, 1975 { 1976 self.delegate.visit_some(SingletonMapRecursive { 1977 delegate: deserializer, 1978 }) 1979 } 1980 visit_unit<E>(self) -> Result<Self::Value, E> where E: de::Error,1981 fn visit_unit<E>(self) -> Result<Self::Value, E> 1982 where 1983 E: de::Error, 1984 { 1985 self.delegate.visit_unit() 1986 } 1987 visit_map<A>(self, map: A) -> Result<Self::Value, A::Error> where A: MapAccess<'de>,1988 fn visit_map<A>(self, map: A) -> Result<Self::Value, A::Error> 1989 where 1990 A: MapAccess<'de>, 1991 { 1992 self.delegate.visit_enum(SingletonMapRecursiveAsEnum { 1993 name: self.name, 1994 delegate: map, 1995 }) 1996 } 1997 } 1998 1999 impl<'de, D> EnumAccess<'de> for SingletonMapRecursiveAsEnum<D> 2000 where 2001 D: MapAccess<'de>, 2002 { 2003 type Error = D::Error; 2004 type Variant = Self; 2005 variant_seed<V>(mut self, seed: V) -> Result<(V::Value, Self::Variant), Self::Error> where V: DeserializeSeed<'de>,2006 fn variant_seed<V>(mut self, seed: V) -> Result<(V::Value, Self::Variant), Self::Error> 2007 where 2008 V: DeserializeSeed<'de>, 2009 { 2010 match self.delegate.next_key_seed(seed)? { 2011 Some(value) => Ok((value, self)), 2012 None => Err(de::Error::invalid_value( 2013 Unexpected::Map, 2014 &"map with a single key", 2015 )), 2016 } 2017 } 2018 } 2019 2020 impl<'de, D> VariantAccess<'de> for SingletonMapRecursiveAsEnum<D> 2021 where 2022 D: MapAccess<'de>, 2023 { 2024 type Error = D::Error; 2025 unit_variant(self) -> Result<(), Self::Error>2026 fn unit_variant(self) -> Result<(), Self::Error> { 2027 Err(de::Error::invalid_type(Unexpected::Map, &"unit variant")) 2028 } 2029 newtype_variant_seed<T>(mut self, seed: T) -> Result<T::Value, Self::Error> where T: DeserializeSeed<'de>,2030 fn newtype_variant_seed<T>(mut self, seed: T) -> Result<T::Value, Self::Error> 2031 where 2032 T: DeserializeSeed<'de>, 2033 { 2034 let value = self 2035 .delegate 2036 .next_value_seed(SingletonMapRecursive { delegate: seed })?; 2037 match self.delegate.next_key()? { 2038 None => Ok(value), 2039 Some(IgnoredAny) => Err(de::Error::invalid_value( 2040 Unexpected::Map, 2041 &"map with a single key", 2042 )), 2043 } 2044 } 2045 tuple_variant<V>(mut self, len: usize, visitor: V) -> Result<V::Value, Self::Error> where V: Visitor<'de>,2046 fn tuple_variant<V>(mut self, len: usize, visitor: V) -> Result<V::Value, Self::Error> 2047 where 2048 V: Visitor<'de>, 2049 { 2050 let value = self.delegate.next_value_seed(TupleVariantSeed { 2051 len, 2052 visitor: SingletonMapRecursive { delegate: visitor }, 2053 })?; 2054 match self.delegate.next_key()? { 2055 None => Ok(value), 2056 Some(IgnoredAny) => Err(de::Error::invalid_value( 2057 Unexpected::Map, 2058 &"map with a single key", 2059 )), 2060 } 2061 } 2062 struct_variant<V>( mut self, fields: &'static [&'static str], visitor: V, ) -> Result<V::Value, Self::Error> where V: Visitor<'de>,2063 fn struct_variant<V>( 2064 mut self, 2065 fields: &'static [&'static str], 2066 visitor: V, 2067 ) -> Result<V::Value, Self::Error> 2068 where 2069 V: Visitor<'de>, 2070 { 2071 let value = self.delegate.next_value_seed(StructVariantSeed { 2072 name: self.name, 2073 fields, 2074 visitor: SingletonMapRecursive { delegate: visitor }, 2075 })?; 2076 match self.delegate.next_key()? { 2077 None => Ok(value), 2078 Some(IgnoredAny) => Err(de::Error::invalid_value( 2079 Unexpected::Map, 2080 &"map with a single key", 2081 )), 2082 } 2083 } 2084 } 2085 2086 struct TupleVariantSeed<V> { 2087 len: usize, 2088 visitor: V, 2089 } 2090 2091 impl<'de, V> DeserializeSeed<'de> for TupleVariantSeed<V> 2092 where 2093 V: Visitor<'de>, 2094 { 2095 type Value = V::Value; 2096 deserialize<D>(self, deserializer: D) -> Result<Self::Value, D::Error> where D: Deserializer<'de>,2097 fn deserialize<D>(self, deserializer: D) -> Result<Self::Value, D::Error> 2098 where 2099 D: Deserializer<'de>, 2100 { 2101 deserializer.deserialize_tuple(self.len, self.visitor) 2102 } 2103 } 2104 2105 struct StructVariantSeed<V> { 2106 name: &'static str, 2107 fields: &'static [&'static str], 2108 visitor: V, 2109 } 2110 2111 impl<'de, V> DeserializeSeed<'de> for StructVariantSeed<V> 2112 where 2113 V: Visitor<'de>, 2114 { 2115 type Value = V::Value; 2116 deserialize<D>(self, deserializer: D) -> Result<Self::Value, D::Error> where D: Deserializer<'de>,2117 fn deserialize<D>(self, deserializer: D) -> Result<Self::Value, D::Error> 2118 where 2119 D: Deserializer<'de>, 2120 { 2121 deserializer.deserialize_struct(self.name, self.fields, self.visitor) 2122 } 2123 } 2124 } 2125