Hex Artifact Content
Not logged in

Artifact f0237a9c290e1d0ce17b0b2136fbacb3da4d1e7c:


0000: 2f 2f 21 20 49 6d 70 6c 65 6d 65 6e 74 61 74 69  //! Implementati
0010: 6f 6e 73 20 6f 66 20 73 65 72 69 61 6c 69 7a 61  ons of serializa
0020: 74 69 6f 6e 20 66 6f 72 20 73 74 72 75 63 74 75  tion for structu
0030: 72 65 73 20 66 6f 75 6e 64 20 69 6e 20 6c 69 62  res found in lib
0040: 61 6c 6c 6f 63 0a 0a 75 73 65 20 73 74 64 3a 3a  alloc..use std::
0050: 68 61 73 68 3a 3a 7b 48 61 73 68 2c 20 42 75 69  hash::{Hash, Bui
0060: 6c 64 48 61 73 68 65 72 7d 3b 0a 0a 75 73 65 20  ldHasher};..use 
0070: 63 72 61 74 65 3a 3a 7b 44 65 63 6f 64 61 62 6c  crate::{Decodabl
0080: 65 2c 20 45 6e 63 6f 64 61 62 6c 65 2c 20 44 65  e, Encodable, De
0090: 63 6f 64 65 72 2c 20 45 6e 63 6f 64 65 72 7d 3b  coder, Encoder};
00a0: 0a 75 73 65 20 73 74 64 3a 3a 63 6f 6c 6c 65 63  .use std::collec
00b0: 74 69 6f 6e 73 3a 3a 7b 4c 69 6e 6b 65 64 4c 69  tions::{LinkedLi
00c0: 73 74 2c 20 56 65 63 44 65 71 75 65 2c 20 42 54  st, VecDeque, BT
00d0: 72 65 65 4d 61 70 2c 20 42 54 72 65 65 53 65 74  reeMap, BTreeSet
00e0: 2c 20 48 61 73 68 4d 61 70 2c 20 48 61 73 68 53  , HashMap, HashS
00f0: 65 74 7d 3b 0a 75 73 65 20 73 74 64 3a 3a 72 63  et};.use std::rc
0100: 3a 3a 52 63 3b 0a 75 73 65 20 73 74 64 3a 3a 73  ::Rc;.use std::s
0110: 79 6e 63 3a 3a 41 72 63 3b 0a 0a 75 73 65 20 73  ync::Arc;..use s
0120: 6d 61 6c 6c 76 65 63 3a 3a 7b 41 72 72 61 79 2c  mallvec::{Array,
0130: 20 53 6d 61 6c 6c 56 65 63 7d 3b 0a 0a 69 6d 70   SmallVec};..imp
0140: 6c 3c 41 3a 20 41 72 72 61 79 3c 49 74 65 6d 3a  l<A: Array<Item:
0150: 20 45 6e 63 6f 64 61 62 6c 65 3e 3e 20 45 6e 63   Encodable>> Enc
0160: 6f 64 61 62 6c 65 20 66 6f 72 20 53 6d 61 6c 6c  odable for Small
0170: 56 65 63 3c 41 3e 20 7b 0a 20 20 20 20 66 6e 20  Vec<A> {.    fn 
0180: 65 6e 63 6f 64 65 3c 53 3a 20 45 6e 63 6f 64 65  encode<S: Encode
0190: 72 3e 28 26 73 65 6c 66 2c 20 73 3a 20 26 6d 75  r>(&self, s: &mu
01a0: 74 20 53 29 20 2d 3e 20 52 65 73 75 6c 74 3c 28  t S) -> Result<(
01b0: 29 2c 20 53 3a 3a 45 72 72 6f 72 3e 20 7b 0a 20  ), S::Error> {. 
01c0: 20 20 20 20 20 20 20 73 2e 65 6d 69 74 5f 73 65         s.emit_se
01d0: 71 28 73 65 6c 66 2e 6c 65 6e 28 29 2c 20 7c 73  q(self.len(), |s
01e0: 7c 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  | {.            
01f0: 66 6f 72 20 28 69 2c 20 65 29 20 69 6e 20 73 65  for (i, e) in se
0200: 6c 66 2e 69 74 65 72 28 29 2e 65 6e 75 6d 65 72  lf.iter().enumer
0210: 61 74 65 28 29 20 7b 0a 20 20 20 20 20 20 20 20  ate() {.        
0220: 20 20 20 20 20 20 20 20 73 2e 65 6d 69 74 5f 73          s.emit_s
0230: 65 71 5f 65 6c 74 28 69 2c 20 7c 73 7c 20 65 2e  eq_elt(i, |s| e.
0240: 65 6e 63 6f 64 65 28 73 29 29 3f 3b 0a 20 20 20  encode(s))?;.   
0250: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
0260: 20 20 20 20 20 20 20 4f 6b 28 28 29 29 0a 20 20         Ok(()).  
0270: 20 20 20 20 20 20 7d 29 0a 20 20 20 20 7d 0a 7d        }).    }.}
0280: 0a 0a 69 6d 70 6c 3c 41 3a 20 41 72 72 61 79 3c  ..impl<A: Array<
0290: 49 74 65 6d 3a 20 44 65 63 6f 64 61 62 6c 65 3e  Item: Decodable>
02a0: 3e 20 44 65 63 6f 64 61 62 6c 65 20 66 6f 72 20  > Decodable for 
02b0: 53 6d 61 6c 6c 56 65 63 3c 41 3e 20 7b 0a 20 20  SmallVec<A> {.  
02c0: 20 20 66 6e 20 64 65 63 6f 64 65 3c 44 3a 20 44    fn decode<D: D
02d0: 65 63 6f 64 65 72 3e 28 64 3a 20 26 6d 75 74 20  ecoder>(d: &mut 
02e0: 44 29 20 2d 3e 20 52 65 73 75 6c 74 3c 53 6d 61  D) -> Result<Sma
02f0: 6c 6c 56 65 63 3c 41 3e 2c 20 44 3a 3a 45 72 72  llVec<A>, D::Err
0300: 6f 72 3e 20 7b 0a 20 20 20 20 20 20 20 20 64 2e  or> {.        d.
0310: 72 65 61 64 5f 73 65 71 28 7c 64 2c 20 6c 65 6e  read_seq(|d, len
0320: 7c 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  | {.            
0330: 6c 65 74 20 6d 75 74 20 76 65 63 20 3d 20 53 6d  let mut vec = Sm
0340: 61 6c 6c 56 65 63 3a 3a 77 69 74 68 5f 63 61 70  allVec::with_cap
0350: 61 63 69 74 79 28 6c 65 6e 29 3b 0a 20 20 20 20  acity(len);.    
0360: 20 20 20 20 20 20 20 20 2f 2f 20 46 49 58 4d 45          // FIXME
0370: 28 23 34 38 39 39 34 29 20 2d 20 63 6f 75 6c 64  (#48994) - could
0380: 20 6a 75 73 74 20 62 65 20 63 6f 6c 6c 65 63 74   just be collect
0390: 65 64 20 69 6e 74 6f 20 61 20 52 65 73 75 6c 74  ed into a Result
03a0: 3c 53 6d 61 6c 6c 56 65 63 2c 20 44 3a 3a 45 72  <SmallVec, D::Er
03b0: 72 6f 72 3e 0a 20 20 20 20 20 20 20 20 20 20 20  ror>.           
03c0: 20 66 6f 72 20 69 20 69 6e 20 30 2e 2e 6c 65 6e   for i in 0..len
03d0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
03e0: 20 20 20 76 65 63 2e 70 75 73 68 28 64 2e 72 65     vec.push(d.re
03f0: 61 64 5f 73 65 71 5f 65 6c 74 28 69 2c 20 7c 64  ad_seq_elt(i, |d
0400: 7c 20 44 65 63 6f 64 61 62 6c 65 3a 3a 64 65 63  | Decodable::dec
0410: 6f 64 65 28 64 29 29 3f 29 3b 0a 20 20 20 20 20  ode(d))?);.     
0420: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
0430: 20 20 20 20 20 4f 6b 28 76 65 63 29 0a 20 20 20       Ok(vec).   
0440: 20 20 20 20 20 7d 29 0a 20 20 20 20 7d 0a 7d 0a       }).    }.}.
0450: 0a 69 6d 70 6c 3c 54 3a 20 45 6e 63 6f 64 61 62  .impl<T: Encodab
0460: 6c 65 3e 20 45 6e 63 6f 64 61 62 6c 65 20 66 6f  le> Encodable fo
0470: 72 20 4c 69 6e 6b 65 64 4c 69 73 74 3c 54 3e 20  r LinkedList<T> 
0480: 7b 0a 20 20 20 20 66 6e 20 65 6e 63 6f 64 65 3c  {.    fn encode<
0490: 53 3a 20 45 6e 63 6f 64 65 72 3e 28 26 73 65 6c  S: Encoder>(&sel
04a0: 66 2c 20 73 3a 20 26 6d 75 74 20 53 29 20 2d 3e  f, s: &mut S) ->
04b0: 20 52 65 73 75 6c 74 3c 28 29 2c 20 53 3a 3a 45   Result<(), S::E
04c0: 72 72 6f 72 3e 20 7b 0a 20 20 20 20 20 20 20 20  rror> {.        
04d0: 73 2e 65 6d 69 74 5f 73 65 71 28 73 65 6c 66 2e  s.emit_seq(self.
04e0: 6c 65 6e 28 29 2c 20 7c 73 7c 20 7b 0a 20 20 20  len(), |s| {.   
04f0: 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 2c           for (i,
0500: 20 65 29 20 69 6e 20 73 65 6c 66 2e 69 74 65 72   e) in self.iter
0510: 28 29 2e 65 6e 75 6d 65 72 61 74 65 28 29 20 7b  ().enumerate() {
0520: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0530: 20 73 2e 65 6d 69 74 5f 73 65 71 5f 65 6c 74 28   s.emit_seq_elt(
0540: 69 2c 20 7c 73 7c 20 65 2e 65 6e 63 6f 64 65 28  i, |s| e.encode(
0550: 73 29 29 3f 3b 0a 20 20 20 20 20 20 20 20 20 20  s))?;.          
0560: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
0570: 4f 6b 28 28 29 29 0a 20 20 20 20 20 20 20 20 7d  Ok(()).        }
0580: 29 0a 20 20 20 20 7d 0a 7d 0a 0a 69 6d 70 6c 3c  ).    }.}..impl<
0590: 54 3a 44 65 63 6f 64 61 62 6c 65 3e 20 44 65 63  T:Decodable> Dec
05a0: 6f 64 61 62 6c 65 20 66 6f 72 20 4c 69 6e 6b 65  odable for Linke
05b0: 64 4c 69 73 74 3c 54 3e 20 7b 0a 20 20 20 20 66  dList<T> {.    f
05c0: 6e 20 64 65 63 6f 64 65 3c 44 3a 20 44 65 63 6f  n decode<D: Deco
05d0: 64 65 72 3e 28 64 3a 20 26 6d 75 74 20 44 29 20  der>(d: &mut D) 
05e0: 2d 3e 20 52 65 73 75 6c 74 3c 4c 69 6e 6b 65 64  -> Result<Linked
05f0: 4c 69 73 74 3c 54 3e 2c 20 44 3a 3a 45 72 72 6f  List<T>, D::Erro
0600: 72 3e 20 7b 0a 20 20 20 20 20 20 20 20 64 2e 72  r> {.        d.r
0610: 65 61 64 5f 73 65 71 28 7c 64 2c 20 6c 65 6e 7c  ead_seq(|d, len|
0620: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c   {.            l
0630: 65 74 20 6d 75 74 20 6c 69 73 74 20 3d 20 4c 69  et mut list = Li
0640: 6e 6b 65 64 4c 69 73 74 3a 3a 6e 65 77 28 29 3b  nkedList::new();
0650: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72  .            for
0660: 20 69 20 69 6e 20 30 2e 2e 6c 65 6e 20 7b 0a 20   i in 0..len {. 
0670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
0680: 69 73 74 2e 70 75 73 68 5f 62 61 63 6b 28 64 2e  ist.push_back(d.
0690: 72 65 61 64 5f 73 65 71 5f 65 6c 74 28 69 2c 20  read_seq_elt(i, 
06a0: 7c 64 7c 20 44 65 63 6f 64 61 62 6c 65 3a 3a 64  |d| Decodable::d
06b0: 65 63 6f 64 65 28 64 29 29 3f 29 3b 0a 20 20 20  ecode(d))?);.   
06c0: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
06d0: 20 20 20 20 20 20 20 4f 6b 28 6c 69 73 74 29 0a         Ok(list).
06e0: 20 20 20 20 20 20 20 20 7d 29 0a 20 20 20 20 7d          }).    }
06f0: 0a 7d 0a 0a 69 6d 70 6c 3c 54 3a 20 45 6e 63 6f  .}..impl<T: Enco
0700: 64 61 62 6c 65 3e 20 45 6e 63 6f 64 61 62 6c 65  dable> Encodable
0710: 20 66 6f 72 20 56 65 63 44 65 71 75 65 3c 54 3e   for VecDeque<T>
0720: 20 7b 0a 20 20 20 20 66 6e 20 65 6e 63 6f 64 65   {.    fn encode
0730: 3c 53 3a 20 45 6e 63 6f 64 65 72 3e 28 26 73 65  <S: Encoder>(&se
0740: 6c 66 2c 20 73 3a 20 26 6d 75 74 20 53 29 20 2d  lf, s: &mut S) -
0750: 3e 20 52 65 73 75 6c 74 3c 28 29 2c 20 53 3a 3a  > Result<(), S::
0760: 45 72 72 6f 72 3e 20 7b 0a 20 20 20 20 20 20 20  Error> {.       
0770: 20 73 2e 65 6d 69 74 5f 73 65 71 28 73 65 6c 66   s.emit_seq(self
0780: 2e 6c 65 6e 28 29 2c 20 7c 73 7c 20 7b 0a 20 20  .len(), |s| {.  
0790: 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69            for (i
07a0: 2c 20 65 29 20 69 6e 20 73 65 6c 66 2e 69 74 65  , e) in self.ite
07b0: 72 28 29 2e 65 6e 75 6d 65 72 61 74 65 28 29 20  r().enumerate() 
07c0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
07d0: 20 20 73 2e 65 6d 69 74 5f 73 65 71 5f 65 6c 74    s.emit_seq_elt
07e0: 28 69 2c 20 7c 73 7c 20 65 2e 65 6e 63 6f 64 65  (i, |s| e.encode
07f0: 28 73 29 29 3f 3b 0a 20 20 20 20 20 20 20 20 20  (s))?;.         
0800: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
0810: 20 4f 6b 28 28 29 29 0a 20 20 20 20 20 20 20 20   Ok(()).        
0820: 7d 29 0a 20 20 20 20 7d 0a 7d 0a 0a 69 6d 70 6c  }).    }.}..impl
0830: 3c 54 3a 44 65 63 6f 64 61 62 6c 65 3e 20 44 65  <T:Decodable> De
0840: 63 6f 64 61 62 6c 65 20 66 6f 72 20 56 65 63 44  codable for VecD
0850: 65 71 75 65 3c 54 3e 20 7b 0a 20 20 20 20 66 6e  eque<T> {.    fn
0860: 20 64 65 63 6f 64 65 3c 44 3a 20 44 65 63 6f 64   decode<D: Decod
0870: 65 72 3e 28 64 3a 20 26 6d 75 74 20 44 29 20 2d  er>(d: &mut D) -
0880: 3e 20 52 65 73 75 6c 74 3c 56 65 63 44 65 71 75  > Result<VecDequ
0890: 65 3c 54 3e 2c 20 44 3a 3a 45 72 72 6f 72 3e 20  e<T>, D::Error> 
08a0: 7b 0a 20 20 20 20 20 20 20 20 64 2e 72 65 61 64  {.        d.read
08b0: 5f 73 65 71 28 7c 64 2c 20 6c 65 6e 7c 20 7b 0a  _seq(|d, len| {.
08c0: 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 74 20              let 
08d0: 6d 75 74 20 64 65 71 75 65 3a 20 56 65 63 44 65  mut deque: VecDe
08e0: 71 75 65 3c 54 3e 20 3d 20 56 65 63 44 65 71 75  que<T> = VecDequ
08f0: 65 3a 3a 77 69 74 68 5f 63 61 70 61 63 69 74 79  e::with_capacity
0900: 28 6c 65 6e 29 3b 0a 20 20 20 20 20 20 20 20 20  (len);.         
0910: 20 20 20 66 6f 72 20 69 20 69 6e 20 30 2e 2e 6c     for i in 0..l
0920: 65 6e 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  en {.           
0930: 20 20 20 20 20 64 65 71 75 65 2e 70 75 73 68 5f       deque.push_
0940: 62 61 63 6b 28 64 2e 72 65 61 64 5f 73 65 71 5f  back(d.read_seq_
0950: 65 6c 74 28 69 2c 20 7c 64 7c 20 44 65 63 6f 64  elt(i, |d| Decod
0960: 61 62 6c 65 3a 3a 64 65 63 6f 64 65 28 64 29 29  able::decode(d))
0970: 3f 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ?);.            
0980: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4f 6b  }.            Ok
0990: 28 64 65 71 75 65 29 0a 20 20 20 20 20 20 20 20  (deque).        
09a0: 7d 29 0a 20 20 20 20 7d 0a 7d 0a 0a 69 6d 70 6c  }).    }.}..impl
09b0: 3c 4b 2c 20 56 3e 20 45 6e 63 6f 64 61 62 6c 65  <K, V> Encodable
09c0: 20 66 6f 72 20 42 54 72 65 65 4d 61 70 3c 4b 2c   for BTreeMap<K,
09d0: 20 56 3e 0a 20 20 20 20 77 68 65 72 65 20 4b 3a   V>.    where K:
09e0: 20 45 6e 63 6f 64 61 62 6c 65 20 2b 20 50 61 72   Encodable + Par
09f0: 74 69 61 6c 45 71 20 2b 20 4f 72 64 2c 0a 20 20  tialEq + Ord,.  
0a00: 20 20 20 20 20 20 20 20 56 3a 20 45 6e 63 6f 64          V: Encod
0a10: 61 62 6c 65 0a 7b 0a 20 20 20 20 66 6e 20 65 6e  able.{.    fn en
0a20: 63 6f 64 65 3c 53 3a 20 45 6e 63 6f 64 65 72 3e  code<S: Encoder>
0a30: 28 26 73 65 6c 66 2c 20 65 3a 20 26 6d 75 74 20  (&self, e: &mut 
0a40: 53 29 20 2d 3e 20 52 65 73 75 6c 74 3c 28 29 2c  S) -> Result<(),
0a50: 20 53 3a 3a 45 72 72 6f 72 3e 20 7b 0a 20 20 20   S::Error> {.   
0a60: 20 20 20 20 20 65 2e 65 6d 69 74 5f 6d 61 70 28       e.emit_map(
0a70: 73 65 6c 66 2e 6c 65 6e 28 29 2c 20 7c 65 7c 20  self.len(), |e| 
0a80: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 65  {.            le
0a90: 74 20 6d 75 74 20 69 20 3d 20 30 3b 0a 20 20 20  t mut i = 0;.   
0aa0: 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 6b 65           for (ke
0ab0: 79 2c 20 76 61 6c 29 20 69 6e 20 73 65 6c 66 20  y, val) in self 
0ac0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
0ad0: 20 20 65 2e 65 6d 69 74 5f 6d 61 70 5f 65 6c 74    e.emit_map_elt
0ae0: 5f 6b 65 79 28 69 2c 20 7c 65 7c 20 6b 65 79 2e  _key(i, |e| key.
0af0: 65 6e 63 6f 64 65 28 65 29 29 3f 3b 0a 20 20 20  encode(e))?;.   
0b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 2e 65               e.e
0b10: 6d 69 74 5f 6d 61 70 5f 65 6c 74 5f 76 61 6c 28  mit_map_elt_val(
0b20: 69 2c 20 7c 65 7c 20 76 61 6c 2e 65 6e 63 6f 64  i, |e| val.encod
0b30: 65 28 65 29 29 3f 3b 0a 20 20 20 20 20 20 20 20  e(e))?;.        
0b40: 20 20 20 20 20 20 20 20 69 20 2b 3d 20 31 3b 0a          i += 1;.
0b50: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
0b60: 20 20 20 20 20 20 20 20 20 20 4f 6b 28 28 29 29            Ok(())
0b70: 0a 20 20 20 20 20 20 20 20 7d 29 0a 20 20 20 20  .        }).    
0b80: 7d 0a 7d 0a 0a 69 6d 70 6c 3c 4b 2c 20 56 3e 20  }.}..impl<K, V> 
0b90: 44 65 63 6f 64 61 62 6c 65 20 66 6f 72 20 42 54  Decodable for BT
0ba0: 72 65 65 4d 61 70 3c 4b 2c 20 56 3e 0a 20 20 20  reeMap<K, V>.   
0bb0: 20 77 68 65 72 65 20 4b 3a 20 44 65 63 6f 64 61   where K: Decoda
0bc0: 62 6c 65 20 2b 20 50 61 72 74 69 61 6c 45 71 20  ble + PartialEq 
0bd0: 2b 20 4f 72 64 2c 0a 20 20 20 20 20 20 20 20 20  + Ord,.         
0be0: 20 56 3a 20 44 65 63 6f 64 61 62 6c 65 0a 7b 0a   V: Decodable.{.
0bf0: 20 20 20 20 66 6e 20 64 65 63 6f 64 65 3c 44 3a      fn decode<D:
0c00: 20 44 65 63 6f 64 65 72 3e 28 64 3a 20 26 6d 75   Decoder>(d: &mu
0c10: 74 20 44 29 20 2d 3e 20 52 65 73 75 6c 74 3c 42  t D) -> Result<B
0c20: 54 72 65 65 4d 61 70 3c 4b 2c 20 56 3e 2c 20 44  TreeMap<K, V>, D
0c30: 3a 3a 45 72 72 6f 72 3e 20 7b 0a 20 20 20 20 20  ::Error> {.     
0c40: 20 20 20 64 2e 72 65 61 64 5f 6d 61 70 28 7c 64     d.read_map(|d
0c50: 2c 20 6c 65 6e 7c 20 7b 0a 20 20 20 20 20 20 20  , len| {.       
0c60: 20 20 20 20 20 6c 65 74 20 6d 75 74 20 6d 61 70       let mut map
0c70: 20 3d 20 42 54 72 65 65 4d 61 70 3a 3a 6e 65 77   = BTreeMap::new
0c80: 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ();.            
0c90: 66 6f 72 20 69 20 69 6e 20 30 2e 2e 6c 65 6e 20  for i in 0..len 
0ca0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
0cb0: 20 20 6c 65 74 20 6b 65 79 20 3d 20 64 2e 72 65    let key = d.re
0cc0: 61 64 5f 6d 61 70 5f 65 6c 74 5f 6b 65 79 28 69  ad_map_elt_key(i
0cd0: 2c 20 7c 64 7c 20 44 65 63 6f 64 61 62 6c 65 3a  , |d| Decodable:
0ce0: 3a 64 65 63 6f 64 65 28 64 29 29 3f 3b 0a 20 20  :decode(d))?;.  
0cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 65                le
0d00: 74 20 76 61 6c 20 3d 20 64 2e 72 65 61 64 5f 6d  t val = d.read_m
0d10: 61 70 5f 65 6c 74 5f 76 61 6c 28 69 2c 20 7c 64  ap_elt_val(i, |d
0d20: 7c 20 44 65 63 6f 64 61 62 6c 65 3a 3a 64 65 63  | Decodable::dec
0d30: 6f 64 65 28 64 29 29 3f 3b 0a 20 20 20 20 20 20  ode(d))?;.      
0d40: 20 20 20 20 20 20 20 20 20 20 6d 61 70 2e 69 6e            map.in
0d50: 73 65 72 74 28 6b 65 79 2c 20 76 61 6c 29 3b 0a  sert(key, val);.
0d60: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
0d70: 20 20 20 20 20 20 20 20 20 20 4f 6b 28 6d 61 70            Ok(map
0d80: 29 0a 20 20 20 20 20 20 20 20 7d 29 0a 20 20 20  ).        }).   
0d90: 20 7d 0a 7d 0a 0a 69 6d 70 6c 3c 54 3e 20 45 6e   }.}..impl<T> En
0da0: 63 6f 64 61 62 6c 65 20 66 6f 72 20 42 54 72 65  codable for BTre
0db0: 65 53 65 74 3c 54 3e 0a 20 20 20 20 77 68 65 72  eSet<T>.    wher
0dc0: 65 20 54 3a 20 45 6e 63 6f 64 61 62 6c 65 20 2b  e T: Encodable +
0dd0: 20 50 61 72 74 69 61 6c 45 71 20 2b 20 4f 72 64   PartialEq + Ord
0de0: 0a 7b 0a 20 20 20 20 66 6e 20 65 6e 63 6f 64 65  .{.    fn encode
0df0: 3c 53 3a 20 45 6e 63 6f 64 65 72 3e 28 26 73 65  <S: Encoder>(&se
0e00: 6c 66 2c 20 73 3a 20 26 6d 75 74 20 53 29 20 2d  lf, s: &mut S) -
0e10: 3e 20 52 65 73 75 6c 74 3c 28 29 2c 20 53 3a 3a  > Result<(), S::
0e20: 45 72 72 6f 72 3e 20 7b 0a 20 20 20 20 20 20 20  Error> {.       
0e30: 20 73 2e 65 6d 69 74 5f 73 65 71 28 73 65 6c 66   s.emit_seq(self
0e40: 2e 6c 65 6e 28 29 2c 20 7c 73 7c 20 7b 0a 20 20  .len(), |s| {.  
0e50: 20 20 20 20 20 20 20 20 20 20 6c 65 74 20 6d 75            let mu
0e60: 74 20 69 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  t i = 0;.       
0e70: 20 20 20 20 20 66 6f 72 20 65 20 69 6e 20 73 65       for e in se
0e80: 6c 66 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  lf {.           
0e90: 20 20 20 20 20 73 2e 65 6d 69 74 5f 73 65 71 5f       s.emit_seq_
0ea0: 65 6c 74 28 69 2c 20 7c 73 7c 20 65 2e 65 6e 63  elt(i, |s| e.enc
0eb0: 6f 64 65 28 73 29 29 3f 3b 0a 20 20 20 20 20 20  ode(s))?;.      
0ec0: 20 20 20 20 20 20 20 20 20 20 69 20 2b 3d 20 31            i += 1
0ed0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ;.            }.
0ee0: 20 20 20 20 20 20 20 20 20 20 20 20 4f 6b 28 28              Ok((
0ef0: 29 29 0a 20 20 20 20 20 20 20 20 7d 29 0a 20 20  )).        }).  
0f00: 20 20 7d 0a 7d 0a 0a 69 6d 70 6c 3c 54 3e 20 44    }.}..impl<T> D
0f10: 65 63 6f 64 61 62 6c 65 20 66 6f 72 20 42 54 72  ecodable for BTr
0f20: 65 65 53 65 74 3c 54 3e 0a 20 20 20 20 77 68 65  eeSet<T>.    whe
0f30: 72 65 20 54 3a 20 44 65 63 6f 64 61 62 6c 65 20  re T: Decodable 
0f40: 2b 20 50 61 72 74 69 61 6c 45 71 20 2b 20 4f 72  + PartialEq + Or
0f50: 64 0a 7b 0a 20 20 20 20 66 6e 20 64 65 63 6f 64  d.{.    fn decod
0f60: 65 3c 44 3a 20 44 65 63 6f 64 65 72 3e 28 64 3a  e<D: Decoder>(d:
0f70: 20 26 6d 75 74 20 44 29 20 2d 3e 20 52 65 73 75   &mut D) -> Resu
0f80: 6c 74 3c 42 54 72 65 65 53 65 74 3c 54 3e 2c 20  lt<BTreeSet<T>, 
0f90: 44 3a 3a 45 72 72 6f 72 3e 20 7b 0a 20 20 20 20  D::Error> {.    
0fa0: 20 20 20 20 64 2e 72 65 61 64 5f 73 65 71 28 7c      d.read_seq(|
0fb0: 64 2c 20 6c 65 6e 7c 20 7b 0a 20 20 20 20 20 20  d, len| {.      
0fc0: 20 20 20 20 20 20 6c 65 74 20 6d 75 74 20 73 65        let mut se
0fd0: 74 20 3d 20 42 54 72 65 65 53 65 74 3a 3a 6e 65  t = BTreeSet::ne
0fe0: 77 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  w();.           
0ff0: 20 66 6f 72 20 69 20 69 6e 20 30 2e 2e 6c 65 6e   for i in 0..len
1000: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
1010: 20 20 20 73 65 74 2e 69 6e 73 65 72 74 28 64 2e     set.insert(d.
1020: 72 65 61 64 5f 73 65 71 5f 65 6c 74 28 69 2c 20  read_seq_elt(i, 
1030: 7c 64 7c 20 44 65 63 6f 64 61 62 6c 65 3a 3a 64  |d| Decodable::d
1040: 65 63 6f 64 65 28 64 29 29 3f 29 3b 0a 20 20 20  ecode(d))?);.   
1050: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1060: 20 20 20 20 20 20 20 4f 6b 28 73 65 74 29 0a 20         Ok(set). 
1070: 20 20 20 20 20 20 20 7d 29 0a 20 20 20 20 7d 0a         }).    }.
1080: 7d 0a 0a 69 6d 70 6c 3c 4b 2c 20 56 2c 20 53 3e  }..impl<K, V, S>
1090: 20 45 6e 63 6f 64 61 62 6c 65 20 66 6f 72 20 48   Encodable for H
10a0: 61 73 68 4d 61 70 3c 4b 2c 20 56 2c 20 53 3e 0a  ashMap<K, V, S>.
10b0: 20 20 20 20 77 68 65 72 65 20 4b 3a 20 45 6e 63      where K: Enc
10c0: 6f 64 61 62 6c 65 20 2b 20 45 71 2c 0a 20 20 20  odable + Eq,.   
10d0: 20 20 20 20 20 20 20 56 3a 20 45 6e 63 6f 64 61         V: Encoda
10e0: 62 6c 65 2c 0a 20 20 20 20 20 20 20 20 20 20 53  ble,.          S
10f0: 3a 20 42 75 69 6c 64 48 61 73 68 65 72 2c 0a 7b  : BuildHasher,.{
1100: 0a 20 20 20 20 66 6e 20 65 6e 63 6f 64 65 3c 45  .    fn encode<E
1110: 3a 20 45 6e 63 6f 64 65 72 3e 28 26 73 65 6c 66  : Encoder>(&self
1120: 2c 20 65 3a 20 26 6d 75 74 20 45 29 20 2d 3e 20  , e: &mut E) -> 
1130: 52 65 73 75 6c 74 3c 28 29 2c 20 45 3a 3a 45 72  Result<(), E::Er
1140: 72 6f 72 3e 20 7b 0a 20 20 20 20 20 20 20 20 65  ror> {.        e
1150: 2e 65 6d 69 74 5f 6d 61 70 28 73 65 6c 66 2e 6c  .emit_map(self.l
1160: 65 6e 28 29 2c 20 7c 65 7c 20 7b 0a 20 20 20 20  en(), |e| {.    
1170: 20 20 20 20 20 20 20 20 6c 65 74 20 6d 75 74 20          let mut 
1180: 69 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  i = 0;.         
1190: 20 20 20 66 6f 72 20 28 6b 65 79 2c 20 76 61 6c     for (key, val
11a0: 29 20 69 6e 20 73 65 6c 66 20 7b 0a 20 20 20 20  ) in self {.    
11b0: 20 20 20 20 20 20 20 20 20 20 20 20 65 2e 65 6d              e.em
11c0: 69 74 5f 6d 61 70 5f 65 6c 74 5f 6b 65 79 28 69  it_map_elt_key(i
11d0: 2c 20 7c 65 7c 20 6b 65 79 2e 65 6e 63 6f 64 65  , |e| key.encode
11e0: 28 65 29 29 3f 3b 0a 20 20 20 20 20 20 20 20 20  (e))?;.         
11f0: 20 20 20 20 20 20 20 65 2e 65 6d 69 74 5f 6d 61         e.emit_ma
1200: 70 5f 65 6c 74 5f 76 61 6c 28 69 2c 20 7c 65 7c  p_elt_val(i, |e|
1210: 20 76 61 6c 2e 65 6e 63 6f 64 65 28 65 29 29 3f   val.encode(e))?
1220: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
1230: 20 20 69 20 2b 3d 20 31 3b 0a 20 20 20 20 20 20    i += 1;.      
1240: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1250: 20 20 20 20 4f 6b 28 28 29 29 0a 20 20 20 20 20      Ok(()).     
1260: 20 20 20 7d 29 0a 20 20 20 20 7d 0a 7d 0a 0a 69     }).    }.}..i
1270: 6d 70 6c 3c 4b 2c 20 56 2c 20 53 3e 20 44 65 63  mpl<K, V, S> Dec
1280: 6f 64 61 62 6c 65 20 66 6f 72 20 48 61 73 68 4d  odable for HashM
1290: 61 70 3c 4b 2c 20 56 2c 20 53 3e 0a 20 20 20 20  ap<K, V, S>.    
12a0: 77 68 65 72 65 20 4b 3a 20 44 65 63 6f 64 61 62  where K: Decodab
12b0: 6c 65 20 2b 20 48 61 73 68 20 2b 20 45 71 2c 0a  le + Hash + Eq,.
12c0: 20 20 20 20 20 20 20 20 20 20 56 3a 20 44 65 63            V: Dec
12d0: 6f 64 61 62 6c 65 2c 0a 20 20 20 20 20 20 20 20  odable,.        
12e0: 20 20 53 3a 20 42 75 69 6c 64 48 61 73 68 65 72    S: BuildHasher
12f0: 20 2b 20 44 65 66 61 75 6c 74 2c 0a 7b 0a 20 20   + Default,.{.  
1300: 20 20 66 6e 20 64 65 63 6f 64 65 3c 44 3a 20 44    fn decode<D: D
1310: 65 63 6f 64 65 72 3e 28 64 3a 20 26 6d 75 74 20  ecoder>(d: &mut 
1320: 44 29 20 2d 3e 20 52 65 73 75 6c 74 3c 48 61 73  D) -> Result<Has
1330: 68 4d 61 70 3c 4b 2c 20 56 2c 20 53 3e 2c 20 44  hMap<K, V, S>, D
1340: 3a 3a 45 72 72 6f 72 3e 20 7b 0a 20 20 20 20 20  ::Error> {.     
1350: 20 20 20 64 2e 72 65 61 64 5f 6d 61 70 28 7c 64     d.read_map(|d
1360: 2c 20 6c 65 6e 7c 20 7b 0a 20 20 20 20 20 20 20  , len| {.       
1370: 20 20 20 20 20 6c 65 74 20 73 74 61 74 65 20 3d       let state =
1380: 20 44 65 66 61 75 6c 74 3a 3a 64 65 66 61 75 6c   Default::defaul
1390: 74 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  t();.           
13a0: 20 6c 65 74 20 6d 75 74 20 6d 61 70 20 3d 20 48   let mut map = H
13b0: 61 73 68 4d 61 70 3a 3a 77 69 74 68 5f 63 61 70  ashMap::with_cap
13c0: 61 63 69 74 79 5f 61 6e 64 5f 68 61 73 68 65 72  acity_and_hasher
13d0: 28 6c 65 6e 2c 20 73 74 61 74 65 29 3b 0a 20 20  (len, state);.  
13e0: 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 69 20            for i 
13f0: 69 6e 20 30 2e 2e 6c 65 6e 20 7b 0a 20 20 20 20  in 0..len {.    
1400: 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 74 20              let 
1410: 6b 65 79 20 3d 20 64 2e 72 65 61 64 5f 6d 61 70  key = d.read_map
1420: 5f 65 6c 74 5f 6b 65 79 28 69 2c 20 7c 64 7c 20  _elt_key(i, |d| 
1430: 44 65 63 6f 64 61 62 6c 65 3a 3a 64 65 63 6f 64  Decodable::decod
1440: 65 28 64 29 29 3f 3b 0a 20 20 20 20 20 20 20 20  e(d))?;.        
1450: 20 20 20 20 20 20 20 20 6c 65 74 20 76 61 6c 20          let val 
1460: 3d 20 64 2e 72 65 61 64 5f 6d 61 70 5f 65 6c 74  = d.read_map_elt
1470: 5f 76 61 6c 28 69 2c 20 7c 64 7c 20 44 65 63 6f  _val(i, |d| Deco
1480: 64 61 62 6c 65 3a 3a 64 65 63 6f 64 65 28 64 29  dable::decode(d)
1490: 29 3f 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  )?;.            
14a0: 20 20 20 20 6d 61 70 2e 69 6e 73 65 72 74 28 6b      map.insert(k
14b0: 65 79 2c 20 76 61 6c 29 3b 0a 20 20 20 20 20 20  ey, val);.      
14c0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
14d0: 20 20 20 20 4f 6b 28 6d 61 70 29 0a 20 20 20 20      Ok(map).    
14e0: 20 20 20 20 7d 29 0a 20 20 20 20 7d 0a 7d 0a 0a      }).    }.}..
14f0: 69 6d 70 6c 3c 54 2c 20 53 3e 20 45 6e 63 6f 64  impl<T, S> Encod
1500: 61 62 6c 65 20 66 6f 72 20 48 61 73 68 53 65 74  able for HashSet
1510: 3c 54 2c 20 53 3e 0a 20 20 20 20 77 68 65 72 65  <T, S>.    where
1520: 20 54 3a 20 45 6e 63 6f 64 61 62 6c 65 20 2b 20   T: Encodable + 
1530: 45 71 2c 0a 20 20 20 20 20 20 20 20 20 20 53 3a  Eq,.          S:
1540: 20 42 75 69 6c 64 48 61 73 68 65 72 2c 0a 7b 0a   BuildHasher,.{.
1550: 20 20 20 20 66 6e 20 65 6e 63 6f 64 65 3c 45 3a      fn encode<E:
1560: 20 45 6e 63 6f 64 65 72 3e 28 26 73 65 6c 66 2c   Encoder>(&self,
1570: 20 73 3a 20 26 6d 75 74 20 45 29 20 2d 3e 20 52   s: &mut E) -> R
1580: 65 73 75 6c 74 3c 28 29 2c 20 45 3a 3a 45 72 72  esult<(), E::Err
1590: 6f 72 3e 20 7b 0a 20 20 20 20 20 20 20 20 73 2e  or> {.        s.
15a0: 65 6d 69 74 5f 73 65 71 28 73 65 6c 66 2e 6c 65  emit_seq(self.le
15b0: 6e 28 29 2c 20 7c 73 7c 20 7b 0a 20 20 20 20 20  n(), |s| {.     
15c0: 20 20 20 20 20 20 20 6c 65 74 20 6d 75 74 20 69         let mut i
15d0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20   = 0;.          
15e0: 20 20 66 6f 72 20 65 20 69 6e 20 73 65 6c 66 20    for e in self 
15f0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
1600: 20 20 73 2e 65 6d 69 74 5f 73 65 71 5f 65 6c 74    s.emit_seq_elt
1610: 28 69 2c 20 7c 73 7c 20 65 2e 65 6e 63 6f 64 65  (i, |s| e.encode
1620: 28 73 29 29 3f 3b 0a 20 20 20 20 20 20 20 20 20  (s))?;.         
1630: 20 20 20 20 20 20 20 69 20 2b 3d 20 31 3b 0a 20         i += 1;. 
1640: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
1650: 20 20 20 20 20 20 20 20 20 4f 6b 28 28 29 29 0a           Ok(()).
1660: 20 20 20 20 20 20 20 20 7d 29 0a 20 20 20 20 7d          }).    }
1670: 0a 7d 0a 0a 69 6d 70 6c 3c 54 2c 20 53 3e 20 44  .}..impl<T, S> D
1680: 65 63 6f 64 61 62 6c 65 20 66 6f 72 20 48 61 73  ecodable for Has
1690: 68 53 65 74 3c 54 2c 20 53 3e 0a 20 20 20 20 77  hSet<T, S>.    w
16a0: 68 65 72 65 20 54 3a 20 44 65 63 6f 64 61 62 6c  here T: Decodabl
16b0: 65 20 2b 20 48 61 73 68 20 2b 20 45 71 2c 0a 20  e + Hash + Eq,. 
16c0: 20 20 20 20 20 20 20 20 20 53 3a 20 42 75 69 6c           S: Buil
16d0: 64 48 61 73 68 65 72 20 2b 20 44 65 66 61 75 6c  dHasher + Defaul
16e0: 74 2c 0a 7b 0a 20 20 20 20 66 6e 20 64 65 63 6f  t,.{.    fn deco
16f0: 64 65 3c 44 3a 20 44 65 63 6f 64 65 72 3e 28 64  de<D: Decoder>(d
1700: 3a 20 26 6d 75 74 20 44 29 20 2d 3e 20 52 65 73  : &mut D) -> Res
1710: 75 6c 74 3c 48 61 73 68 53 65 74 3c 54 2c 20 53  ult<HashSet<T, S
1720: 3e 2c 20 44 3a 3a 45 72 72 6f 72 3e 20 7b 0a 20  >, D::Error> {. 
1730: 20 20 20 20 20 20 20 64 2e 72 65 61 64 5f 73 65         d.read_se
1740: 71 28 7c 64 2c 20 6c 65 6e 7c 20 7b 0a 20 20 20  q(|d, len| {.   
1750: 20 20 20 20 20 20 20 20 20 6c 65 74 20 73 74 61           let sta
1760: 74 65 20 3d 20 44 65 66 61 75 6c 74 3a 3a 64 65  te = Default::de
1770: 66 61 75 6c 74 28 29 3b 0a 20 20 20 20 20 20 20  fault();.       
1780: 20 20 20 20 20 6c 65 74 20 6d 75 74 20 73 65 74       let mut set
1790: 20 3d 20 48 61 73 68 53 65 74 3a 3a 77 69 74 68   = HashSet::with
17a0: 5f 63 61 70 61 63 69 74 79 5f 61 6e 64 5f 68 61  _capacity_and_ha
17b0: 73 68 65 72 28 6c 65 6e 2c 20 73 74 61 74 65 29  sher(len, state)
17c0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f  ;.            fo
17d0: 72 20 69 20 69 6e 20 30 2e 2e 6c 65 6e 20 7b 0a  r i in 0..len {.
17e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f0: 73 65 74 2e 69 6e 73 65 72 74 28 64 2e 72 65 61  set.insert(d.rea
1800: 64 5f 73 65 71 5f 65 6c 74 28 69 2c 20 7c 64 7c  d_seq_elt(i, |d|
1810: 20 44 65 63 6f 64 61 62 6c 65 3a 3a 64 65 63 6f   Decodable::deco
1820: 64 65 28 64 29 29 3f 29 3b 0a 20 20 20 20 20 20  de(d))?);.      
1830: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1840: 20 20 20 20 4f 6b 28 73 65 74 29 0a 20 20 20 20      Ok(set).    
1850: 20 20 20 20 7d 29 0a 20 20 20 20 7d 0a 7d 0a 0a      }).    }.}..
1860: 69 6d 70 6c 3c 4b 2c 20 56 2c 20 53 3e 20 45 6e  impl<K, V, S> En
1870: 63 6f 64 61 62 6c 65 20 66 6f 72 20 69 6e 64 65  codable for inde
1880: 78 6d 61 70 3a 3a 49 6e 64 65 78 4d 61 70 3c 4b  xmap::IndexMap<K
1890: 2c 20 56 2c 20 53 3e 0a 20 20 20 20 77 68 65 72  , V, S>.    wher
18a0: 65 20 4b 3a 20 45 6e 63 6f 64 61 62 6c 65 20 2b  e K: Encodable +
18b0: 20 48 61 73 68 20 2b 20 45 71 2c 0a 20 20 20 20   Hash + Eq,.    
18c0: 20 20 20 20 20 20 56 3a 20 45 6e 63 6f 64 61 62        V: Encodab
18d0: 6c 65 2c 0a 20 20 20 20 20 20 20 20 20 20 53 3a  le,.          S:
18e0: 20 42 75 69 6c 64 48 61 73 68 65 72 2c 0a 7b 0a   BuildHasher,.{.
18f0: 20 20 20 20 66 6e 20 65 6e 63 6f 64 65 3c 45 3a      fn encode<E:
1900: 20 45 6e 63 6f 64 65 72 3e 28 26 73 65 6c 66 2c   Encoder>(&self,
1910: 20 65 3a 20 26 6d 75 74 20 45 29 20 2d 3e 20 52   e: &mut E) -> R
1920: 65 73 75 6c 74 3c 28 29 2c 20 45 3a 3a 45 72 72  esult<(), E::Err
1930: 6f 72 3e 20 7b 0a 20 20 20 20 20 20 20 20 65 2e  or> {.        e.
1940: 65 6d 69 74 5f 6d 61 70 28 73 65 6c 66 2e 6c 65  emit_map(self.le
1950: 6e 28 29 2c 20 7c 65 7c 20 7b 0a 20 20 20 20 20  n(), |e| {.     
1960: 20 20 20 20 20 20 20 6c 65 74 20 6d 75 74 20 69         let mut i
1970: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20   = 0;.          
1980: 20 20 66 6f 72 20 28 6b 65 79 2c 20 76 61 6c 29    for (key, val)
1990: 20 69 6e 20 73 65 6c 66 20 7b 0a 20 20 20 20 20   in self {.     
19a0: 20 20 20 20 20 20 20 20 20 20 20 65 2e 65 6d 69             e.emi
19b0: 74 5f 6d 61 70 5f 65 6c 74 5f 6b 65 79 28 69 2c  t_map_elt_key(i,
19c0: 20 7c 65 7c 20 6b 65 79 2e 65 6e 63 6f 64 65 28   |e| key.encode(
19d0: 65 29 29 3f 3b 0a 20 20 20 20 20 20 20 20 20 20  e))?;.          
19e0: 20 20 20 20 20 20 65 2e 65 6d 69 74 5f 6d 61 70        e.emit_map
19f0: 5f 65 6c 74 5f 76 61 6c 28 69 2c 20 7c 65 7c 20  _elt_val(i, |e| 
1a00: 76 61 6c 2e 65 6e 63 6f 64 65 28 65 29 29 3f 3b  val.encode(e))?;
1a10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a20: 20 69 20 2b 3d 20 31 3b 0a 20 20 20 20 20 20 20   i += 1;.       
1a30: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
1a40: 20 20 20 4f 6b 28 28 29 29 0a 20 20 20 20 20 20     Ok(()).      
1a50: 20 20 7d 29 0a 20 20 20 20 7d 0a 7d 0a 0a 69 6d    }).    }.}..im
1a60: 70 6c 3c 4b 2c 20 56 2c 20 53 3e 20 44 65 63 6f  pl<K, V, S> Deco
1a70: 64 61 62 6c 65 20 66 6f 72 20 69 6e 64 65 78 6d  dable for indexm
1a80: 61 70 3a 3a 49 6e 64 65 78 4d 61 70 3c 4b 2c 20  ap::IndexMap<K, 
1a90: 56 2c 20 53 3e 0a 20 20 20 20 77 68 65 72 65 20  V, S>.    where 
1aa0: 4b 3a 20 44 65 63 6f 64 61 62 6c 65 20 2b 20 48  K: Decodable + H
1ab0: 61 73 68 20 2b 20 45 71 2c 0a 20 20 20 20 20 20  ash + Eq,.      
1ac0: 20 20 20 20 56 3a 20 44 65 63 6f 64 61 62 6c 65      V: Decodable
1ad0: 2c 0a 20 20 20 20 20 20 20 20 20 20 53 3a 20 42  ,.          S: B
1ae0: 75 69 6c 64 48 61 73 68 65 72 20 2b 20 44 65 66  uildHasher + Def
1af0: 61 75 6c 74 2c 0a 7b 0a 20 20 20 20 66 6e 20 64  ault,.{.    fn d
1b00: 65 63 6f 64 65 3c 44 3a 20 44 65 63 6f 64 65 72  ecode<D: Decoder
1b10: 3e 28 64 3a 20 26 6d 75 74 20 44 29 20 2d 3e 20  >(d: &mut D) -> 
1b20: 52 65 73 75 6c 74 3c 69 6e 64 65 78 6d 61 70 3a  Result<indexmap:
1b30: 3a 49 6e 64 65 78 4d 61 70 3c 4b 2c 20 56 2c 20  :IndexMap<K, V, 
1b40: 53 3e 2c 20 44 3a 3a 45 72 72 6f 72 3e 20 7b 0a  S>, D::Error> {.
1b50: 20 20 20 20 20 20 20 20 64 2e 72 65 61 64 5f 6d          d.read_m
1b60: 61 70 28 7c 64 2c 20 6c 65 6e 7c 20 7b 0a 20 20  ap(|d, len| {.  
1b70: 20 20 20 20 20 20 20 20 20 20 6c 65 74 20 73 74            let st
1b80: 61 74 65 20 3d 20 44 65 66 61 75 6c 74 3a 3a 64  ate = Default::d
1b90: 65 66 61 75 6c 74 28 29 3b 0a 20 20 20 20 20 20  efault();.      
1ba0: 20 20 20 20 20 20 6c 65 74 20 6d 75 74 20 6d 61        let mut ma
1bb0: 70 20 3d 20 69 6e 64 65 78 6d 61 70 3a 3a 49 6e  p = indexmap::In
1bc0: 64 65 78 4d 61 70 3a 3a 77 69 74 68 5f 63 61 70  dexMap::with_cap
1bd0: 61 63 69 74 79 5f 61 6e 64 5f 68 61 73 68 65 72  acity_and_hasher
1be0: 28 6c 65 6e 2c 20 73 74 61 74 65 29 3b 0a 20 20  (len, state);.  
1bf0: 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 69 20            for i 
1c00: 69 6e 20 30 2e 2e 6c 65 6e 20 7b 0a 20 20 20 20  in 0..len {.    
1c10: 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 74 20              let 
1c20: 6b 65 79 20 3d 20 64 2e 72 65 61 64 5f 6d 61 70  key = d.read_map
1c30: 5f 65 6c 74 5f 6b 65 79 28 69 2c 20 7c 64 7c 20  _elt_key(i, |d| 
1c40: 44 65 63 6f 64 61 62 6c 65 3a 3a 64 65 63 6f 64  Decodable::decod
1c50: 65 28 64 29 29 3f 3b 0a 20 20 20 20 20 20 20 20  e(d))?;.        
1c60: 20 20 20 20 20 20 20 20 6c 65 74 20 76 61 6c 20          let val 
1c70: 3d 20 64 2e 72 65 61 64 5f 6d 61 70 5f 65 6c 74  = d.read_map_elt
1c80: 5f 76 61 6c 28 69 2c 20 7c 64 7c 20 44 65 63 6f  _val(i, |d| Deco
1c90: 64 61 62 6c 65 3a 3a 64 65 63 6f 64 65 28 64 29  dable::decode(d)
1ca0: 29 3f 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  )?;.            
1cb0: 20 20 20 20 6d 61 70 2e 69 6e 73 65 72 74 28 6b      map.insert(k
1cc0: 65 79 2c 20 76 61 6c 29 3b 0a 20 20 20 20 20 20  ey, val);.      
1cd0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1ce0: 20 20 20 20 4f 6b 28 6d 61 70 29 0a 20 20 20 20      Ok(map).    
1cf0: 20 20 20 20 7d 29 0a 20 20 20 20 7d 0a 7d 0a 0a      }).    }.}..
1d00: 69 6d 70 6c 3c 54 2c 20 53 3e 20 45 6e 63 6f 64  impl<T, S> Encod
1d10: 61 62 6c 65 20 66 6f 72 20 69 6e 64 65 78 6d 61  able for indexma
1d20: 70 3a 3a 49 6e 64 65 78 53 65 74 3c 54 2c 20 53  p::IndexSet<T, S
1d30: 3e 0a 20 20 20 20 77 68 65 72 65 20 54 3a 20 45  >.    where T: E
1d40: 6e 63 6f 64 61 62 6c 65 20 2b 20 48 61 73 68 20  ncodable + Hash 
1d50: 2b 20 45 71 2c 0a 20 20 20 20 20 20 20 20 20 20  + Eq,.          
1d60: 53 3a 20 42 75 69 6c 64 48 61 73 68 65 72 2c 0a  S: BuildHasher,.
1d70: 7b 0a 20 20 20 20 66 6e 20 65 6e 63 6f 64 65 3c  {.    fn encode<
1d80: 45 3a 20 45 6e 63 6f 64 65 72 3e 28 26 73 65 6c  E: Encoder>(&sel
1d90: 66 2c 20 73 3a 20 26 6d 75 74 20 45 29 20 2d 3e  f, s: &mut E) ->
1da0: 20 52 65 73 75 6c 74 3c 28 29 2c 20 45 3a 3a 45   Result<(), E::E
1db0: 72 72 6f 72 3e 20 7b 0a 20 20 20 20 20 20 20 20  rror> {.        
1dc0: 73 2e 65 6d 69 74 5f 73 65 71 28 73 65 6c 66 2e  s.emit_seq(self.
1dd0: 6c 65 6e 28 29 2c 20 7c 73 7c 20 7b 0a 20 20 20  len(), |s| {.   
1de0: 20 20 20 20 20 20 20 20 20 6c 65 74 20 6d 75 74           let mut
1df0: 20 69 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20   i = 0;.        
1e00: 20 20 20 20 66 6f 72 20 65 20 69 6e 20 73 65 6c      for e in sel
1e10: 66 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  f {.            
1e20: 20 20 20 20 73 2e 65 6d 69 74 5f 73 65 71 5f 65      s.emit_seq_e
1e30: 6c 74 28 69 2c 20 7c 73 7c 20 65 2e 65 6e 63 6f  lt(i, |s| e.enco
1e40: 64 65 28 73 29 29 3f 3b 0a 20 20 20 20 20 20 20  de(s))?;.       
1e50: 20 20 20 20 20 20 20 20 20 69 20 2b 3d 20 31 3b           i += 1;
1e60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
1e70: 20 20 20 20 20 20 20 20 20 20 20 4f 6b 28 28 29             Ok(()
1e80: 29 0a 20 20 20 20 20 20 20 20 7d 29 0a 20 20 20  ).        }).   
1e90: 20 7d 0a 7d 0a 0a 69 6d 70 6c 3c 54 2c 20 53 3e   }.}..impl<T, S>
1ea0: 20 44 65 63 6f 64 61 62 6c 65 20 66 6f 72 20 69   Decodable for i
1eb0: 6e 64 65 78 6d 61 70 3a 3a 49 6e 64 65 78 53 65  ndexmap::IndexSe
1ec0: 74 3c 54 2c 20 53 3e 0a 20 20 20 20 77 68 65 72  t<T, S>.    wher
1ed0: 65 20 54 3a 20 44 65 63 6f 64 61 62 6c 65 20 2b  e T: Decodable +
1ee0: 20 48 61 73 68 20 2b 20 45 71 2c 0a 20 20 20 20   Hash + Eq,.    
1ef0: 20 20 20 20 20 20 53 3a 20 42 75 69 6c 64 48 61        S: BuildHa
1f00: 73 68 65 72 20 2b 20 44 65 66 61 75 6c 74 2c 0a  sher + Default,.
1f10: 7b 0a 20 20 20 20 66 6e 20 64 65 63 6f 64 65 3c  {.    fn decode<
1f20: 44 3a 20 44 65 63 6f 64 65 72 3e 28 64 3a 20 26  D: Decoder>(d: &
1f30: 6d 75 74 20 44 29 20 2d 3e 20 52 65 73 75 6c 74  mut D) -> Result
1f40: 3c 69 6e 64 65 78 6d 61 70 3a 3a 49 6e 64 65 78  <indexmap::Index
1f50: 53 65 74 3c 54 2c 20 53 3e 2c 20 44 3a 3a 45 72  Set<T, S>, D::Er
1f60: 72 6f 72 3e 20 7b 0a 20 20 20 20 20 20 20 20 64  ror> {.        d
1f70: 2e 72 65 61 64 5f 73 65 71 28 7c 64 2c 20 6c 65  .read_seq(|d, le
1f80: 6e 7c 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  n| {.           
1f90: 20 6c 65 74 20 73 74 61 74 65 20 3d 20 44 65 66   let state = Def
1fa0: 61 75 6c 74 3a 3a 64 65 66 61 75 6c 74 28 29 3b  ault::default();
1fb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 74  .            let
1fc0: 20 6d 75 74 20 73 65 74 20 3d 20 69 6e 64 65 78   mut set = index
1fd0: 6d 61 70 3a 3a 49 6e 64 65 78 53 65 74 3a 3a 77  map::IndexSet::w
1fe0: 69 74 68 5f 63 61 70 61 63 69 74 79 5f 61 6e 64  ith_capacity_and
1ff0: 5f 68 61 73 68 65 72 28 6c 65 6e 2c 20 73 74 61  _hasher(len, sta
2000: 74 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  te);.           
2010: 20 66 6f 72 20 69 20 69 6e 20 30 2e 2e 6c 65 6e   for i in 0..len
2020: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
2030: 20 20 20 73 65 74 2e 69 6e 73 65 72 74 28 64 2e     set.insert(d.
2040: 72 65 61 64 5f 73 65 71 5f 65 6c 74 28 69 2c 20  read_seq_elt(i, 
2050: 7c 64 7c 20 44 65 63 6f 64 61 62 6c 65 3a 3a 64  |d| Decodable::d
2060: 65 63 6f 64 65 28 64 29 29 3f 29 3b 0a 20 20 20  ecode(d))?);.   
2070: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
2080: 20 20 20 20 20 20 20 4f 6b 28 73 65 74 29 0a 20         Ok(set). 
2090: 20 20 20 20 20 20 20 7d 29 0a 20 20 20 20 7d 0a         }).    }.
20a0: 7d 0a 0a 69 6d 70 6c 3c 54 3a 20 45 6e 63 6f 64  }..impl<T: Encod
20b0: 61 62 6c 65 3e 20 45 6e 63 6f 64 61 62 6c 65 20  able> Encodable 
20c0: 66 6f 72 20 52 63 3c 5b 54 5d 3e 20 7b 0a 20 20  for Rc<[T]> {.  
20d0: 20 20 66 6e 20 65 6e 63 6f 64 65 3c 45 3a 20 45    fn encode<E: E
20e0: 6e 63 6f 64 65 72 3e 28 26 73 65 6c 66 2c 20 73  ncoder>(&self, s
20f0: 3a 20 26 6d 75 74 20 45 29 20 2d 3e 20 52 65 73  : &mut E) -> Res
2100: 75 6c 74 3c 28 29 2c 20 45 3a 3a 45 72 72 6f 72  ult<(), E::Error
2110: 3e 20 7b 0a 20 20 20 20 20 20 20 20 73 2e 65 6d  > {.        s.em
2120: 69 74 5f 73 65 71 28 73 65 6c 66 2e 6c 65 6e 28  it_seq(self.len(
2130: 29 2c 20 7c 73 7c 20 7b 0a 20 20 20 20 20 20 20  ), |s| {.       
2140: 20 20 20 20 20 66 6f 72 20 28 69 6e 64 65 78 2c       for (index,
2150: 20 65 29 20 69 6e 20 73 65 6c 66 2e 69 74 65 72   e) in self.iter
2160: 28 29 2e 65 6e 75 6d 65 72 61 74 65 28 29 20 7b  ().enumerate() {
2170: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2180: 20 73 2e 65 6d 69 74 5f 73 65 71 5f 65 6c 74 28   s.emit_seq_elt(
2190: 69 6e 64 65 78 2c 20 7c 73 7c 20 65 2e 65 6e 63  index, |s| e.enc
21a0: 6f 64 65 28 73 29 29 3f 3b 0a 20 20 20 20 20 20  ode(s))?;.      
21b0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
21c0: 20 20 20 20 4f 6b 28 28 29 29 0a 20 20 20 20 20      Ok(()).     
21d0: 20 20 20 7d 29 0a 20 20 20 20 7d 0a 7d 0a 0a 69     }).    }.}..i
21e0: 6d 70 6c 3c 54 3a 20 44 65 63 6f 64 61 62 6c 65  mpl<T: Decodable
21f0: 3e 20 44 65 63 6f 64 61 62 6c 65 20 66 6f 72 20  > Decodable for 
2200: 52 63 3c 5b 54 5d 3e 20 7b 0a 20 20 20 20 66 6e  Rc<[T]> {.    fn
2210: 20 64 65 63 6f 64 65 3c 44 3a 20 44 65 63 6f 64   decode<D: Decod
2220: 65 72 3e 28 64 3a 20 26 6d 75 74 20 44 29 20 2d  er>(d: &mut D) -
2230: 3e 20 52 65 73 75 6c 74 3c 52 63 3c 5b 54 5d 3e  > Result<Rc<[T]>
2240: 2c 20 44 3a 3a 45 72 72 6f 72 3e 20 7b 0a 20 20  , D::Error> {.  
2250: 20 20 20 20 20 20 64 2e 72 65 61 64 5f 73 65 71        d.read_seq
2260: 28 7c 64 2c 20 6c 65 6e 7c 20 7b 0a 20 20 20 20  (|d, len| {.    
2270: 20 20 20 20 20 20 20 20 6c 65 74 20 6d 75 74 20          let mut 
2280: 76 65 63 20 3d 20 56 65 63 3a 3a 77 69 74 68 5f  vec = Vec::with_
2290: 63 61 70 61 63 69 74 79 28 6c 65 6e 29 3b 0a 20  capacity(len);. 
22a0: 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 69             for i
22b0: 6e 64 65 78 20 69 6e 20 30 2e 2e 6c 65 6e 20 7b  ndex in 0..len {
22c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22d0: 20 76 65 63 2e 70 75 73 68 28 64 2e 72 65 61 64   vec.push(d.read
22e0: 5f 73 65 71 5f 65 6c 74 28 69 6e 64 65 78 2c 20  _seq_elt(index, 
22f0: 7c 64 7c 20 44 65 63 6f 64 61 62 6c 65 3a 3a 64  |d| Decodable::d
2300: 65 63 6f 64 65 28 64 29 29 3f 29 3b 0a 20 20 20  ecode(d))?);.   
2310: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
2320: 20 20 20 20 20 20 20 4f 6b 28 76 65 63 2e 69 6e         Ok(vec.in
2330: 74 6f 28 29 29 0a 20 20 20 20 20 20 20 20 7d 29  to()).        })
2340: 0a 20 20 20 20 7d 0a 7d 0a 0a 69 6d 70 6c 3c 54  .    }.}..impl<T
2350: 3a 20 45 6e 63 6f 64 61 62 6c 65 3e 20 45 6e 63  : Encodable> Enc
2360: 6f 64 61 62 6c 65 20 66 6f 72 20 41 72 63 3c 5b  odable for Arc<[
2370: 54 5d 3e 20 7b 0a 20 20 20 20 66 6e 20 65 6e 63  T]> {.    fn enc
2380: 6f 64 65 3c 45 3a 20 45 6e 63 6f 64 65 72 3e 28  ode<E: Encoder>(
2390: 26 73 65 6c 66 2c 20 73 3a 20 26 6d 75 74 20 45  &self, s: &mut E
23a0: 29 20 2d 3e 20 52 65 73 75 6c 74 3c 28 29 2c 20  ) -> Result<(), 
23b0: 45 3a 3a 45 72 72 6f 72 3e 20 7b 0a 20 20 20 20  E::Error> {.    
23c0: 20 20 20 20 73 2e 65 6d 69 74 5f 73 65 71 28 73      s.emit_seq(s
23d0: 65 6c 66 2e 6c 65 6e 28 29 2c 20 7c 73 7c 20 7b  elf.len(), |s| {
23e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72  .            for
23f0: 20 28 69 6e 64 65 78 2c 20 65 29 20 69 6e 20 73   (index, e) in s
2400: 65 6c 66 2e 69 74 65 72 28 29 2e 65 6e 75 6d 65  elf.iter().enume
2410: 72 61 74 65 28 29 20 7b 0a 20 20 20 20 20 20 20  rate() {.       
2420: 20 20 20 20 20 20 20 20 20 73 2e 65 6d 69 74 5f           s.emit_
2430: 73 65 71 5f 65 6c 74 28 69 6e 64 65 78 2c 20 7c  seq_elt(index, |
2440: 73 7c 20 65 2e 65 6e 63 6f 64 65 28 73 29 29 3f  s| e.encode(s))?
2450: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ;.            }.
2460: 20 20 20 20 20 20 20 20 20 20 20 20 4f 6b 28 28              Ok((
2470: 29 29 0a 20 20 20 20 20 20 20 20 7d 29 0a 20 20  )).        }).  
2480: 20 20 7d 0a 7d 0a 0a 69 6d 70 6c 3c 54 3a 20 44    }.}..impl<T: D
2490: 65 63 6f 64 61 62 6c 65 3e 20 44 65 63 6f 64 61  ecodable> Decoda
24a0: 62 6c 65 20 66 6f 72 20 41 72 63 3c 5b 54 5d 3e  ble for Arc<[T]>
24b0: 20 7b 0a 20 20 20 20 66 6e 20 64 65 63 6f 64 65   {.    fn decode
24c0: 3c 44 3a 20 44 65 63 6f 64 65 72 3e 28 64 3a 20  <D: Decoder>(d: 
24d0: 26 6d 75 74 20 44 29 20 2d 3e 20 52 65 73 75 6c  &mut D) -> Resul
24e0: 74 3c 41 72 63 3c 5b 54 5d 3e 2c 20 44 3a 3a 45  t<Arc<[T]>, D::E
24f0: 72 72 6f 72 3e 20 7b 0a 20 20 20 20 20 20 20 20  rror> {.        
2500: 64 2e 72 65 61 64 5f 73 65 71 28 7c 64 2c 20 6c  d.read_seq(|d, l
2510: 65 6e 7c 20 7b 0a 20 20 20 20 20 20 20 20 20 20  en| {.          
2520: 20 20 6c 65 74 20 6d 75 74 20 76 65 63 20 3d 20    let mut vec = 
2530: 56 65 63 3a 3a 77 69 74 68 5f 63 61 70 61 63 69  Vec::with_capaci
2540: 74 79 28 6c 65 6e 29 3b 0a 20 20 20 20 20 20 20  ty(len);.       
2550: 20 20 20 20 20 66 6f 72 20 69 6e 64 65 78 20 69       for index i
2560: 6e 20 30 2e 2e 6c 65 6e 20 7b 0a 20 20 20 20 20  n 0..len {.     
2570: 20 20 20 20 20 20 20 20 20 20 20 76 65 63 2e 70             vec.p
2580: 75 73 68 28 64 2e 72 65 61 64 5f 73 65 71 5f 65  ush(d.read_seq_e
2590: 6c 74 28 69 6e 64 65 78 2c 20 7c 64 7c 20 44 65  lt(index, |d| De
25a0: 63 6f 64 61 62 6c 65 3a 3a 64 65 63 6f 64 65 28  codable::decode(
25b0: 64 29 29 3f 29 3b 0a 20 20 20 20 20 20 20 20 20  d))?);.         
25c0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
25d0: 20 4f 6b 28 76 65 63 2e 69 6e 74 6f 28 29 29 0a   Ok(vec.into()).
25e0: 20 20 20 20 20 20 20 20 7d 29 0a 20 20 20 20 7d          }).    }
25f0: 0a 7d 0a                                         .}.