Hex Artifact Content
Not logged in

Artifact 0d6bf6ee8c33695441195f42166f2c47bb1296d7:


0000: 2f 2f 20 43 6f 70 79 72 69 67 68 74 20 32 30 31  // Copyright 201
0010: 36 20 4d 61 69 64 53 61 66 65 2e 6e 65 74 20 6c  6 MaidSafe.net l
0020: 69 6d 69 74 65 64 2e 0a 2f 2f 0a 2f 2f 20 54 68  imited..//.// Th
0030: 69 73 20 53 41 46 45 20 4e 65 74 77 6f 72 6b 20  is SAFE Network 
0040: 53 6f 66 74 77 61 72 65 20 69 73 20 6c 69 63 65  Software is lice
0050: 6e 73 65 64 20 74 6f 20 79 6f 75 20 75 6e 64 65  nsed to you unde
0060: 72 20 28 31 29 20 74 68 65 20 4d 61 69 64 53 61  r (1) the MaidSa
0070: 66 65 2e 6e 65 74 0a 2f 2f 20 43 6f 6d 6d 65 72  fe.net.// Commer
0080: 63 69 61 6c 20 4c 69 63 65 6e 73 65 2c 20 76 65  cial License, ve
0090: 72 73 69 6f 6e 20 31 2e 30 20 6f 72 20 6c 61 74  rsion 1.0 or lat
00a0: 65 72 2c 20 6f 72 20 28 32 29 20 54 68 65 20 47  er, or (2) The G
00b0: 65 6e 65 72 61 6c 20 50 75 62 6c 69 63 20 4c 69  eneral Public Li
00c0: 63 65 6e 73 65 0a 2f 2f 20 28 47 50 4c 29 2c 20  cense.// (GPL), 
00d0: 76 65 72 73 69 6f 6e 20 33 2c 20 64 65 70 65 6e  version 3, depen
00e0: 64 69 6e 67 20 6f 6e 20 77 68 69 63 68 20 6c 69  ding on which li
00f0: 63 65 6e 63 65 20 79 6f 75 20 61 63 63 65 70 74  cence you accept
0100: 65 64 20 6f 6e 20 69 6e 69 74 69 61 6c 20 61 63  ed on initial ac
0110: 63 65 73 73 0a 2f 2f 20 74 6f 20 74 68 65 20 53  cess.// to the S
0120: 6f 66 74 77 61 72 65 20 28 74 68 65 20 22 4c 69  oftware (the "Li
0130: 63 65 6e 63 65 73 22 29 2e 0a 2f 2f 0a 2f 2f 20  cences")..//.// 
0140: 42 79 20 63 6f 6e 74 72 69 62 75 74 69 6e 67 20  By contributing 
0150: 63 6f 64 65 20 74 6f 20 74 68 65 20 53 41 46 45  code to the SAFE
0160: 20 4e 65 74 77 6f 72 6b 20 53 6f 66 74 77 61 72   Network Softwar
0170: 65 2c 20 6f 72 20 74 6f 20 74 68 69 73 20 70 72  e, or to this pr
0180: 6f 6a 65 63 74 0a 2f 2f 20 67 65 6e 65 72 61 6c  oject.// general
0190: 6c 79 2c 20 79 6f 75 20 61 67 72 65 65 20 74 6f  ly, you agree to
01a0: 20 62 65 20 62 6f 75 6e 64 20 62 79 20 74 68 65   be bound by the
01b0: 20 74 65 72 6d 73 20 6f 66 20 74 68 65 20 4d 61   terms of the Ma
01c0: 69 64 53 61 66 65 20 43 6f 6e 74 72 69 62 75 74  idSafe Contribut
01d0: 6f 72 0a 2f 2f 20 41 67 72 65 65 6d 65 6e 74 2c  or.// Agreement,
01e0: 20 76 65 72 73 69 6f 6e 20 31 2e 30 2e 0a 2f 2f   version 1.0..//
01f0: 20 54 68 69 73 2c 20 61 6c 6f 6e 67 20 77 69 74   This, along wit
0200: 68 20 74 68 65 20 4c 69 63 65 6e 73 65 73 20 63  h the Licenses c
0210: 61 6e 20 62 65 20 66 6f 75 6e 64 20 69 6e 20 74  an be found in t
0220: 68 65 20 72 6f 6f 74 20 64 69 72 65 63 74 6f 72  he root director
0230: 79 20 6f 66 20 74 68 69 73 0a 2f 2f 20 70 72 6f  y of this.// pro
0240: 6a 65 63 74 20 61 74 20 4c 49 43 45 4e 53 45 2c  ject at LICENSE,
0250: 20 43 4f 50 59 49 4e 47 20 61 6e 64 20 43 4f 4e   COPYING and CON
0260: 54 52 49 42 55 54 4f 52 2e 0a 2f 2f 0a 2f 2f 20  TRIBUTOR..//.// 
0270: 55 6e 6c 65 73 73 20 72 65 71 75 69 72 65 64 20  Unless required 
0280: 62 79 20 61 70 70 6c 69 63 61 62 6c 65 20 6c 61  by applicable la
0290: 77 20 6f 72 20 61 67 72 65 65 64 20 74 6f 20 69  w or agreed to i
02a0: 6e 20 77 72 69 74 69 6e 67 2c 20 74 68 65 20 53  n writing, the S
02b0: 41 46 45 20 4e 65 74 77 6f 72 6b 0a 2f 2f 20 53  AFE Network.// S
02c0: 6f 66 74 77 61 72 65 20 64 69 73 74 72 69 62 75  oftware distribu
02d0: 74 65 64 20 75 6e 64 65 72 20 74 68 65 20 47 50  ted under the GP
02e0: 4c 20 4c 69 63 65 6e 63 65 20 69 73 20 64 69 73  L Licence is dis
02f0: 74 72 69 62 75 74 65 64 20 6f 6e 20 61 6e 20 22  tributed on an "
0300: 41 53 20 49 53 22 0a 2f 2f 20 42 41 53 49 53 2c  AS IS".// BASIS,
0310: 20 57 49 54 48 4f 55 54 20 57 41 52 52 41 4e 54   WITHOUT WARRANT
0320: 49 45 53 20 4f 52 20 43 4f 4e 44 49 54 49 4f 4e  IES OR CONDITION
0330: 53 20 4f 46 20 41 4e 59 20 4b 49 4e 44 2c 20 65  S OF ANY KIND, e
0340: 69 74 68 65 72 20 65 78 70 72 65 73 73 20 6f 72  ither express or
0350: 0a 2f 2f 20 69 6d 70 6c 69 65 64 2e 0a 2f 2f 0a  .// implied..//.
0360: 2f 2f 20 50 6c 65 61 73 65 20 72 65 76 69 65 77  // Please review
0370: 20 74 68 65 20 4c 69 63 65 6e 63 65 73 20 66 6f   the Licences fo
0380: 72 20 74 68 65 20 73 70 65 63 69 66 69 63 20 6c  r the specific l
0390: 61 6e 67 75 61 67 65 20 67 6f 76 65 72 6e 69 6e  anguage governin
03a0: 67 20 70 65 72 6d 69 73 73 69 6f 6e 73 0a 2f 2f  g permissions.//
03b0: 20 61 6e 64 20 6c 69 6d 69 74 61 74 69 6f 6e 73   and limitations
03c0: 20 72 65 6c 61 74 69 6e 67 20 74 6f 20 75 73 65   relating to use
03d0: 20 6f 66 20 74 68 65 20 53 41 46 45 20 4e 65 74   of the SAFE Net
03e0: 77 6f 72 6b 20 53 6f 66 74 77 61 72 65 2e 0a 0a  work Software...
03f0: 0a 75 73 65 20 66 66 69 5f 75 74 69 6c 73 3a 3a  .use ffi_utils::
0400: 7b 52 65 70 72 43 2c 20 76 65 63 5f 69 6e 74 6f  {ReprC, vec_into
0410: 5f 72 61 77 5f 70 61 72 74 73 7d 3b 0a 75 73 65  _raw_parts};.use
0420: 20 6e 66 73 3a 3a 65 72 72 6f 72 73 3a 3a 4e 66   nfs::errors::Nf
0430: 73 45 72 72 6f 72 3b 0a 75 73 65 20 6e 66 73 3a  sError;.use nfs:
0440: 3a 66 66 69 3a 3a 46 69 6c 65 20 61 73 20 46 66  :ffi::File as Ff
0450: 69 46 69 6c 65 3b 0a 75 73 65 20 72 6f 75 74 69  iFile;.use routi
0460: 6e 67 3a 3a 58 6f 72 4e 61 6d 65 3b 0a 75 73 65  ng::XorName;.use
0470: 20 72 75 73 74 63 5f 73 65 72 69 61 6c 69 7a 65   rustc_serialize
0480: 3a 3a 7b 44 65 63 6f 64 61 62 6c 65 2c 20 44 65  ::{Decodable, De
0490: 63 6f 64 65 72 2c 20 45 6e 63 6f 64 61 62 6c 65  coder, Encodable
04a0: 2c 20 45 6e 63 6f 64 65 72 7d 3b 0a 75 73 65 20  , Encoder};.use 
04b0: 73 74 64 3a 3a 73 6c 69 63 65 3b 0a 75 73 65 20  std::slice;.use 
04c0: 74 69 6d 65 3a 3a 7b 73 65 6c 66 2c 20 54 69 6d  time::{self, Tim
04d0: 65 73 70 65 63 2c 20 54 6d 7d 3b 0a 0a 2f 2f 2f  espec, Tm};..///
04e0: 20 52 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   Representation 
04f0: 6f 66 20 61 20 46 69 6c 65 20 74 6f 20 62 65 20  of a File to be 
0500: 70 75 74 20 69 6e 74 6f 20 74 68 65 20 6e 65 74  put into the net
0510: 77 6f 72 6b 2e 20 43 6f 75 6c 64 20 62 65 20 61  work. Could be a
0520: 6e 79 20 6b 69 6e 64 20 6f 66 0a 2f 2f 2f 20 66  ny kind of./// f
0530: 69 6c 65 3a 20 74 65 78 74 2c 20 6d 75 73 69 63  ile: text, music
0540: 2c 20 76 69 64 65 6f 2c 20 65 74 63 2e 0a 23 5b  , video, etc..#[
0550: 64 65 72 69 76 65 28 44 65 62 75 67 2c 20 50 61  derive(Debug, Pa
0560: 72 74 69 61 6c 45 71 2c 20 45 71 2c 20 50 61 72  rtialEq, Eq, Par
0570: 74 69 61 6c 4f 72 64 2c 20 4f 72 64 2c 20 43 6c  tialOrd, Ord, Cl
0580: 6f 6e 65 29 5d 0a 70 75 62 20 73 74 72 75 63 74  one)].pub struct
0590: 20 46 69 6c 65 20 7b 0a 20 20 20 20 73 69 7a 65   File {.    size
05a0: 3a 20 75 36 34 2c 0a 20 20 20 20 63 72 65 61 74  : u64,.    creat
05b0: 65 64 3a 20 54 6d 2c 0a 20 20 20 20 6d 6f 64 69  ed: Tm,.    modi
05c0: 66 69 65 64 3a 20 54 6d 2c 0a 20 20 20 20 75 73  fied: Tm,.    us
05d0: 65 72 5f 6d 65 74 61 64 61 74 61 3a 20 56 65 63  er_metadata: Vec
05e0: 3c 75 38 3e 2c 0a 20 20 20 20 64 61 74 61 5f 6d  <u8>,.    data_m
05f0: 61 70 5f 6e 61 6d 65 3a 20 58 6f 72 4e 61 6d 65  ap_name: XorName
0600: 2c 0a 7d 0a 0a 69 6d 70 6c 20 46 69 6c 65 20 7b  ,.}..impl File {
0610: 0a 20 20 20 20 2f 2f 2f 20 43 72 65 61 74 65 20  .    /// Create 
0620: 61 20 6e 65 77 20 69 6e 73 74 61 6e 63 65 20 6f  a new instance o
0630: 66 20 46 69 6c 65 4d 65 74 61 64 61 74 61 0a 20  f FileMetadata. 
0640: 20 20 20 70 75 62 20 66 6e 20 6e 65 77 28 75 73     pub fn new(us
0650: 65 72 5f 6d 65 74 61 64 61 74 61 3a 20 56 65 63  er_metadata: Vec
0660: 3c 75 38 3e 29 20 2d 3e 20 46 69 6c 65 20 7b 0a  <u8>) -> File {.
0670: 20 20 20 20 20 20 20 20 46 69 6c 65 20 7b 0a 20          File {. 
0680: 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 3a             size:
0690: 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20   0,.            
06a0: 63 72 65 61 74 65 64 3a 20 74 69 6d 65 3a 3a 6e  created: time::n
06b0: 6f 77 5f 75 74 63 28 29 2c 0a 20 20 20 20 20 20  ow_utc(),.      
06c0: 20 20 20 20 20 20 6d 6f 64 69 66 69 65 64 3a 20        modified: 
06d0: 74 69 6d 65 3a 3a 6e 6f 77 5f 75 74 63 28 29 2c  time::now_utc(),
06e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 65  .            use
06f0: 72 5f 6d 65 74 61 64 61 74 61 3a 20 75 73 65 72  r_metadata: user
0700: 5f 6d 65 74 61 64 61 74 61 2c 0a 20 20 20 20 20  _metadata,.     
0710: 20 20 20 20 20 20 20 64 61 74 61 5f 6d 61 70 5f         data_map_
0720: 6e 61 6d 65 3a 20 58 6f 72 4e 61 6d 65 3a 3a 64  name: XorName::d
0730: 65 66 61 75 6c 74 28 29 2c 0a 20 20 20 20 20 20  efault(),.      
0740: 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f    }.    }..    /
0750: 2f 2f 20 43 6f 6e 73 74 72 75 63 74 20 46 46 49  // Construct FFI
0760: 20 77 72 61 70 70 65 72 20 66 6f 72 20 74 68 65   wrapper for the
0770: 20 6e 61 74 69 76 65 20 72 75 73 74 20 60 46 69   native rust `Fi
0780: 6c 65 60 2c 20 63 6f 6e 73 75 6d 69 6e 67 20 74  le`, consuming t
0790: 68 65 20 66 69 6c 65 2e 0a 20 20 20 20 70 75 62  he file..    pub
07a0: 20 66 6e 20 69 6e 74 6f 5f 72 65 70 72 5f 63 28   fn into_repr_c(
07b0: 73 65 6c 66 29 20 2d 3e 20 46 66 69 46 69 6c 65  self) -> FfiFile
07c0: 20 7b 0a 20 20 20 20 20 20 20 20 2f 2f 20 54 4f   {.        // TO
07d0: 44 4f 3a 20 6d 6f 76 65 20 74 68 65 20 6d 65 74  DO: move the met
07e0: 61 64 61 74 61 2c 20 6e 6f 74 20 63 6c 6f 6e 65  adata, not clone
07f0: 2e 0a 20 20 20 20 20 20 20 20 6c 65 74 20 75 73  ..        let us
0800: 65 72 5f 6d 65 74 61 64 61 74 61 20 3d 20 73 65  er_metadata = se
0810: 6c 66 2e 75 73 65 72 5f 6d 65 74 61 64 61 74 61  lf.user_metadata
0820: 28 29 2e 74 6f 5f 76 65 63 28 29 3b 0a 20 20 20  ().to_vec();.   
0830: 20 20 20 20 20 6c 65 74 20 28 75 73 65 72 5f 6d       let (user_m
0840: 65 74 61 64 61 74 61 5f 70 74 72 2c 20 75 73 65  etadata_ptr, use
0850: 72 5f 6d 65 74 61 64 61 74 61 5f 6c 65 6e 2c 20  r_metadata_len, 
0860: 75 73 65 72 5f 6d 65 74 61 64 61 74 61 5f 63 61  user_metadata_ca
0870: 70 29 20 3d 0a 20 20 20 20 20 20 20 20 20 20 20  p) =.           
0880: 20 76 65 63 5f 69 6e 74 6f 5f 72 61 77 5f 70 61   vec_into_raw_pa
0890: 72 74 73 28 75 73 65 72 5f 6d 65 74 61 64 61 74  rts(user_metadat
08a0: 61 29 3b 0a 0a 20 20 20 20 20 20 20 20 46 66 69  a);..        Ffi
08b0: 46 69 6c 65 20 7b 0a 20 20 20 20 20 20 20 20 20  File {.         
08c0: 20 20 20 73 69 7a 65 3a 20 73 65 6c 66 2e 73 69     size: self.si
08d0: 7a 65 28 29 2c 0a 20 20 20 20 20 20 20 20 20 20  ze(),.          
08e0: 20 20 63 72 65 61 74 65 64 3a 20 2a 73 65 6c 66    created: *self
08f0: 2e 63 72 65 61 74 65 64 5f 74 69 6d 65 28 29 2c  .created_time(),
0900: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64  .            mod
0910: 69 66 69 65 64 3a 20 2a 73 65 6c 66 2e 6d 6f 64  ified: *self.mod
0920: 69 66 69 65 64 5f 74 69 6d 65 28 29 2c 0a 20 20  ified_time(),.  
0930: 20 20 20 20 20 20 20 20 20 20 75 73 65 72 5f 6d            user_m
0940: 65 74 61 64 61 74 61 5f 70 74 72 3a 20 75 73 65  etadata_ptr: use
0950: 72 5f 6d 65 74 61 64 61 74 61 5f 70 74 72 2c 0a  r_metadata_ptr,.
0960: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 65 72              user
0970: 5f 6d 65 74 61 64 61 74 61 5f 6c 65 6e 3a 20 75  _metadata_len: u
0980: 73 65 72 5f 6d 65 74 61 64 61 74 61 5f 6c 65 6e  ser_metadata_len
0990: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ,.            us
09a0: 65 72 5f 6d 65 74 61 64 61 74 61 5f 63 61 70 3a  er_metadata_cap:
09b0: 20 75 73 65 72 5f 6d 65 74 61 64 61 74 61 5f 63   user_metadata_c
09c0: 61 70 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ap,.            
09d0: 64 61 74 61 5f 6d 61 70 5f 6e 61 6d 65 3a 20 73  data_map_name: s
09e0: 65 6c 66 2e 64 61 74 61 5f 6d 61 70 5f 6e 61 6d  elf.data_map_nam
09f0: 65 28 29 2e 30 2c 0a 20 20 20 20 20 20 20 20 7d  e().0,.        }
0a00: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20  .    }..    /// 
0a10: 47 65 74 20 74 69 6d 65 20 6f 66 20 63 72 65 61  Get time of crea
0a20: 74 69 6f 6e 0a 20 20 20 20 70 75 62 20 66 6e 20  tion.    pub fn 
0a30: 63 72 65 61 74 65 64 5f 74 69 6d 65 28 26 73 65  created_time(&se
0a40: 6c 66 29 20 2d 3e 20 26 54 6d 20 7b 0a 20 20 20  lf) -> &Tm {.   
0a50: 20 20 20 20 20 26 73 65 6c 66 2e 63 72 65 61 74       &self.creat
0a60: 65 64 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f  ed.    }..    //
0a70: 2f 20 47 65 74 20 74 69 6d 65 20 6f 66 20 6d 6f  / Get time of mo
0a80: 64 69 66 69 63 61 74 69 6f 6e 0a 20 20 20 20 70  dification.    p
0a90: 75 62 20 66 6e 20 6d 6f 64 69 66 69 65 64 5f 74  ub fn modified_t
0aa0: 69 6d 65 28 26 73 65 6c 66 29 20 2d 3e 20 26 54  ime(&self) -> &T
0ab0: 6d 20 7b 0a 20 20 20 20 20 20 20 20 26 73 65 6c  m {.        &sel
0ac0: 66 2e 6d 6f 64 69 66 69 65 64 0a 20 20 20 20 7d  f.modified.    }
0ad0: 0a 0a 20 20 20 20 2f 2f 2f 20 47 65 74 20 74 68  ..    /// Get th
0ae0: 65 20 6e 65 74 77 6f 72 6b 20 6e 61 6d 65 20 6f  e network name o
0af0: 66 20 74 68 65 20 64 61 74 61 20 63 6f 6e 74 61  f the data conta
0b00: 69 6e 69 6e 67 20 74 68 65 20 64 61 74 61 2d 6d  ining the data-m
0b10: 61 70 20 6f 66 20 74 68 65 20 46 69 6c 65 0a 20  ap of the File. 
0b20: 20 20 20 70 75 62 20 66 6e 20 64 61 74 61 5f 6d     pub fn data_m
0b30: 61 70 5f 6e 61 6d 65 28 26 73 65 6c 66 29 20 2d  ap_name(&self) -
0b40: 3e 20 26 58 6f 72 4e 61 6d 65 20 7b 0a 20 20 20  > &XorName {.   
0b50: 20 20 20 20 20 26 73 65 6c 66 2e 64 61 74 61 5f       &self.data_
0b60: 6d 61 70 5f 6e 61 6d 65 0a 20 20 20 20 7d 0a 0a  map_name.    }..
0b70: 20 20 20 20 2f 2f 2f 20 47 65 74 20 73 69 7a 65      /// Get size
0b80: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 20 20 20   information.   
0b90: 20 70 75 62 20 66 6e 20 73 69 7a 65 28 26 73 65   pub fn size(&se
0ba0: 6c 66 29 20 2d 3e 20 75 36 34 20 7b 0a 20 20 20  lf) -> u64 {.   
0bb0: 20 20 20 20 20 73 65 6c 66 2e 73 69 7a 65 0a 20       self.size. 
0bc0: 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 47 65     }..    /// Ge
0bd0: 74 20 75 73 65 72 20 73 65 74 74 65 62 6c 65 20  t user setteble 
0be0: 63 75 73 74 6f 6d 20 6d 65 74 61 64 61 74 61 0a  custom metadata.
0bf0: 20 20 20 20 70 75 62 20 66 6e 20 75 73 65 72 5f      pub fn user_
0c00: 6d 65 74 61 64 61 74 61 28 26 73 65 6c 66 29 20  metadata(&self) 
0c10: 2d 3e 20 26 5b 75 38 5d 20 7b 0a 20 20 20 20 20  -> &[u8] {.     
0c20: 20 20 20 26 73 65 6c 66 2e 75 73 65 72 5f 6d 65     &self.user_me
0c30: 74 61 64 61 74 61 0a 20 20 20 20 7d 0a 0a 20 20  tadata.    }..  
0c40: 20 20 2f 2f 2f 20 53 65 74 20 74 68 65 20 64 61    /// Set the da
0c50: 74 61 2d 6d 61 70 20 6e 61 6d 65 20 6f 66 20 74  ta-map name of t
0c60: 68 65 20 46 69 6c 65 0a 20 20 20 20 70 75 62 20  he File.    pub 
0c70: 66 6e 20 73 65 74 5f 64 61 74 61 5f 6d 61 70 5f  fn set_data_map_
0c80: 6e 61 6d 65 28 26 6d 75 74 20 73 65 6c 66 2c 20  name(&mut self, 
0c90: 64 61 74 61 6d 61 70 5f 6e 61 6d 65 3a 20 58 6f  datamap_name: Xo
0ca0: 72 4e 61 6d 65 29 20 7b 0a 20 20 20 20 20 20 20  rName) {.       
0cb0: 20 73 65 6c 66 2e 64 61 74 61 5f 6d 61 70 5f 6e   self.data_map_n
0cc0: 61 6d 65 20 3d 20 64 61 74 61 6d 61 70 5f 6e 61  ame = datamap_na
0cd0: 6d 65 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  me;.    }..    /
0ce0: 2f 2f 20 53 65 74 20 74 68 65 20 73 69 7a 65 20  // Set the size 
0cf0: 6f 66 20 66 69 6c 65 0a 20 20 20 20 70 75 62 20  of file.    pub 
0d00: 66 6e 20 73 65 74 5f 73 69 7a 65 28 26 6d 75 74  fn set_size(&mut
0d10: 20 73 65 6c 66 2c 20 73 69 7a 65 3a 20 75 36 34   self, size: u64
0d20: 29 20 7b 0a 20 20 20 20 20 20 20 20 73 65 6c 66  ) {.        self
0d30: 2e 73 69 7a 65 20 3d 20 73 69 7a 65 3b 0a 20 20  .size = size;.  
0d40: 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20 53 65 74    }..    /// Set
0d50: 20 74 69 6d 65 20 6f 66 20 63 72 65 61 74 69 6f   time of creatio
0d60: 6e 0a 20 20 20 20 70 75 62 20 66 6e 20 73 65 74  n.    pub fn set
0d70: 5f 63 72 65 61 74 65 64 5f 74 69 6d 65 28 26 6d  _created_time(&m
0d80: 75 74 20 73 65 6c 66 2c 20 63 72 65 61 74 65 64  ut self, created
0d90: 5f 74 69 6d 65 3a 20 54 6d 29 20 7b 0a 20 20 20  _time: Tm) {.   
0da0: 20 20 20 20 20 73 65 6c 66 2e 63 72 65 61 74 65       self.create
0db0: 64 20 3d 20 63 72 65 61 74 65 64 5f 74 69 6d 65  d = created_time
0dc0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20  .    }..    /// 
0dd0: 53 65 74 20 74 69 6d 65 20 6f 66 20 6d 6f 64 69  Set time of modi
0de0: 66 69 63 61 74 69 6f 6e 0a 20 20 20 20 70 75 62  fication.    pub
0df0: 20 66 6e 20 73 65 74 5f 6d 6f 64 69 66 69 65 64   fn set_modified
0e00: 5f 74 69 6d 65 28 26 6d 75 74 20 73 65 6c 66 2c  _time(&mut self,
0e10: 20 6d 6f 64 69 66 69 65 64 5f 74 69 6d 65 3a 20   modified_time: 
0e20: 54 6d 29 20 7b 0a 20 20 20 20 20 20 20 20 73 65  Tm) {.        se
0e30: 6c 66 2e 6d 6f 64 69 66 69 65 64 20 3d 20 6d 6f  lf.modified = mo
0e40: 64 69 66 69 65 64 5f 74 69 6d 65 0a 20 20 20 20  dified_time.    
0e50: 7d 0a 0a 20 20 20 20 2f 2f 2f 20 55 73 65 72 20  }..    /// User 
0e60: 73 65 74 74 65 62 6c 65 20 6d 65 74 61 64 61 74  setteble metadat
0e70: 61 20 66 6f 72 20 63 75 73 74 6f 6d 20 6d 65 74  a for custom met
0e80: 61 64 61 74 61 0a 20 20 20 20 70 75 62 20 66 6e  adata.    pub fn
0e90: 20 73 65 74 5f 75 73 65 72 5f 6d 65 74 61 64 61   set_user_metada
0ea0: 74 61 28 26 6d 75 74 20 73 65 6c 66 2c 20 75 73  ta(&mut self, us
0eb0: 65 72 5f 6d 65 74 61 64 61 74 61 3a 20 56 65 63  er_metadata: Vec
0ec0: 3c 75 38 3e 29 20 7b 0a 20 20 20 20 20 20 20 20  <u8>) {.        
0ed0: 73 65 6c 66 2e 75 73 65 72 5f 6d 65 74 61 64 61  self.user_metada
0ee0: 74 61 20 3d 20 75 73 65 72 5f 6d 65 74 61 64 61  ta = user_metada
0ef0: 74 61 3b 0a 20 20 20 20 7d 0a 7d 0a 0a 69 6d 70  ta;.    }.}..imp
0f00: 6c 20 52 65 70 72 43 20 66 6f 72 20 46 69 6c 65  l ReprC for File
0f10: 20 7b 0a 20 20 20 20 74 79 70 65 20 43 20 3d 20   {.    type C = 
0f20: 2a 63 6f 6e 73 74 20 46 66 69 46 69 6c 65 3b 0a  *const FfiFile;.
0f30: 20 20 20 20 74 79 70 65 20 45 72 72 6f 72 20 3d      type Error =
0f40: 20 4e 66 73 45 72 72 6f 72 3b 0a 0a 20 20 20 20   NfsError;..    
0f50: 2f 2f 2f 20 43 6f 6e 76 65 72 74 20 74 6f 20 74  /// Convert to t
0f60: 68 65 20 6e 61 74 69 76 65 20 72 75 73 74 20 65  he native rust e
0f70: 71 75 69 76 61 6c 65 6e 74 20 62 79 20 63 6c 6f  quivalent by clo
0f80: 6e 69 6e 67 20 74 68 65 20 69 6e 74 65 72 6e 61  ning the interna
0f90: 6c 20 64 61 74 61 2c 20 70 72 65 73 65 72 76 69  l data, preservi
0fa0: 6e 67 20 73 65 6c 66 2e 0a 20 20 20 20 23 5b 61  ng self..    #[a
0fb0: 6c 6c 6f 77 28 75 6e 73 61 66 65 5f 63 6f 64 65  llow(unsafe_code
0fc0: 29 5d 0a 20 20 20 20 75 6e 73 61 66 65 20 66 6e  )].    unsafe fn
0fd0: 20 63 6c 6f 6e 65 5f 66 72 6f 6d 5f 72 65 70 72   clone_from_repr
0fe0: 5f 63 28 72 65 70 72 5f 63 3a 20 2a 63 6f 6e 73  _c(repr_c: *cons
0ff0: 74 20 46 66 69 46 69 6c 65 29 20 2d 3e 20 52 65  t FfiFile) -> Re
1000: 73 75 6c 74 3c 46 69 6c 65 2c 20 4e 66 73 45 72  sult<File, NfsEr
1010: 72 6f 72 3e 20 7b 0a 20 20 20 20 20 20 20 20 6c  ror> {.        l
1020: 65 74 20 75 73 65 72 5f 6d 65 74 61 64 61 74 61  et user_metadata
1030: 20 3d 20 73 6c 69 63 65 3a 3a 66 72 6f 6d 5f 72   = slice::from_r
1040: 61 77 5f 70 61 72 74 73 28 28 2a 72 65 70 72 5f  aw_parts((*repr_
1050: 63 29 2e 75 73 65 72 5f 6d 65 74 61 64 61 74 61  c).user_metadata
1060: 5f 70 74 72 2c 0a 20 20 20 20 20 20 20 20 20 20  _ptr,.          
1070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1090: 20 20 20 20 20 20 20 20 28 2a 72 65 70 72 5f 63          (*repr_c
10a0: 29 2e 75 73 65 72 5f 6d 65 74 61 64 61 74 61 5f  ).user_metadata_
10b0: 6c 65 6e 29 0a 20 20 20 20 20 20 20 20 20 20 20  len).           
10c0: 20 2e 74 6f 5f 76 65 63 28 29 3b 0a 0a 20 20 20   .to_vec();..   
10d0: 20 20 20 20 20 6c 65 74 20 6d 75 74 20 66 69 6c       let mut fil
10e0: 65 20 3d 20 46 69 6c 65 3a 3a 6e 65 77 28 75 73  e = File::new(us
10f0: 65 72 5f 6d 65 74 61 64 61 74 61 29 3b 0a 20 20  er_metadata);.  
1100: 20 20 20 20 20 20 66 69 6c 65 2e 73 65 74 5f 73        file.set_s
1110: 69 7a 65 28 28 2a 72 65 70 72 5f 63 29 2e 73 69  ize((*repr_c).si
1120: 7a 65 29 3b 0a 20 20 20 20 20 20 20 20 66 69 6c  ze);.        fil
1130: 65 2e 73 65 74 5f 63 72 65 61 74 65 64 5f 74 69  e.set_created_ti
1140: 6d 65 28 28 2a 72 65 70 72 5f 63 29 2e 63 72 65  me((*repr_c).cre
1150: 61 74 65 64 29 3b 0a 20 20 20 20 20 20 20 20 66  ated);.        f
1160: 69 6c 65 2e 73 65 74 5f 6d 6f 64 69 66 69 65 64  ile.set_modified
1170: 5f 74 69 6d 65 28 28 2a 72 65 70 72 5f 63 29 2e  _time((*repr_c).
1180: 6d 6f 64 69 66 69 65 64 29 3b 0a 20 20 20 20 20  modified);.     
1190: 20 20 20 66 69 6c 65 2e 73 65 74 5f 64 61 74 61     file.set_data
11a0: 5f 6d 61 70 5f 6e 61 6d 65 28 58 6f 72 4e 61 6d  _map_name(XorNam
11b0: 65 28 28 2a 72 65 70 72 5f 63 29 2e 64 61 74 61  e((*repr_c).data
11c0: 5f 6d 61 70 5f 6e 61 6d 65 29 29 3b 0a 0a 20 20  _map_name));..  
11d0: 20 20 20 20 20 20 4f 6b 28 66 69 6c 65 29 0a 20        Ok(file). 
11e0: 20 20 20 7d 0a 7d 0a 0a 69 6d 70 6c 20 45 6e 63     }.}..impl Enc
11f0: 6f 64 61 62 6c 65 20 66 6f 72 20 46 69 6c 65 20  odable for File 
1200: 7b 0a 20 20 20 20 66 6e 20 65 6e 63 6f 64 65 3c  {.    fn encode<
1210: 45 3a 20 45 6e 63 6f 64 65 72 3e 28 26 73 65 6c  E: Encoder>(&sel
1220: 66 2c 20 65 3a 20 26 6d 75 74 20 45 29 20 2d 3e  f, e: &mut E) ->
1230: 20 52 65 73 75 6c 74 3c 28 29 2c 20 45 3a 3a 45   Result<(), E::E
1240: 72 72 6f 72 3e 20 7b 0a 20 20 20 20 20 20 20 20  rror> {.        
1250: 6c 65 74 20 63 72 65 61 74 65 64 5f 74 69 6d 65  let created_time
1260: 20 3d 20 73 65 6c 66 2e 63 72 65 61 74 65 64 2e   = self.created.
1270: 74 6f 5f 74 69 6d 65 73 70 65 63 28 29 3b 0a 20  to_timespec();. 
1280: 20 20 20 20 20 20 20 6c 65 74 20 6d 6f 64 69 66         let modif
1290: 69 65 64 5f 74 69 6d 65 20 3d 20 73 65 6c 66 2e  ied_time = self.
12a0: 6d 6f 64 69 66 69 65 64 2e 74 6f 5f 74 69 6d 65  modified.to_time
12b0: 73 70 65 63 28 29 3b 0a 0a 20 20 20 20 20 20 20  spec();..       
12c0: 20 65 2e 65 6d 69 74 5f 73 74 72 75 63 74 28 22   e.emit_struct("
12d0: 46 69 6c 65 22 2c 20 37 2c 20 7c 65 7c 20 7b 0a  File", 7, |e| {.
12e0: 20 20 20 20 20 20 20 20 20 20 20 20 65 2e 65 6d              e.em
12f0: 69 74 5f 73 74 72 75 63 74 5f 66 69 65 6c 64 28  it_struct_field(
1300: 22 73 69 7a 65 22 2c 20 30 2c 20 7c 65 7c 20 73  "size", 0, |e| s
1310: 65 6c 66 2e 73 69 7a 65 2e 65 6e 63 6f 64 65 28  elf.size.encode(
1320: 65 29 29 3f 3b 0a 20 20 20 20 20 20 20 20 20 20  e))?;.          
1330: 20 20 65 2e 65 6d 69 74 5f 73 74 72 75 63 74 5f    e.emit_struct_
1340: 66 69 65 6c 64 28 22 63 72 65 61 74 65 64 5f 74  field("created_t
1350: 69 6d 65 5f 73 65 63 22 2c 20 31 2c 20 7c 65 7c  ime_sec", 1, |e|
1360: 20 63 72 65 61 74 65 64 5f 74 69 6d 65 2e 73 65   created_time.se
1370: 63 2e 65 6e 63 6f 64 65 28 65 29 29 3f 3b 0a 20  c.encode(e))?;. 
1380: 20 20 20 20 20 20 20 20 20 20 20 65 2e 65 6d 69             e.emi
1390: 74 5f 73 74 72 75 63 74 5f 66 69 65 6c 64 28 22  t_struct_field("
13a0: 63 72 65 61 74 65 64 5f 74 69 6d 65 5f 6e 73 65  created_time_nse
13b0: 63 22 2c 20 32 2c 20 7c 65 7c 20 63 72 65 61 74  c", 2, |e| creat
13c0: 65 64 5f 74 69 6d 65 2e 6e 73 65 63 2e 65 6e 63  ed_time.nsec.enc
13d0: 6f 64 65 28 65 29 29 3f 3b 0a 20 20 20 20 20 20  ode(e))?;.      
13e0: 20 20 20 20 20 20 65 2e 65 6d 69 74 5f 73 74 72        e.emit_str
13f0: 75 63 74 5f 66 69 65 6c 64 28 22 6d 6f 64 69 66  uct_field("modif
1400: 69 65 64 5f 74 69 6d 65 5f 73 65 63 22 2c 20 33  ied_time_sec", 3
1410: 2c 20 7c 65 7c 20 6d 6f 64 69 66 69 65 64 5f 74  , |e| modified_t
1420: 69 6d 65 2e 73 65 63 2e 65 6e 63 6f 64 65 28 65  ime.sec.encode(e
1430: 29 29 3f 3b 0a 20 20 20 20 20 20 20 20 20 20 20  ))?;.           
1440: 20 65 2e 65 6d 69 74 5f 73 74 72 75 63 74 5f 66   e.emit_struct_f
1450: 69 65 6c 64 28 22 6d 6f 64 69 66 69 65 64 5f 74  ield("modified_t
1460: 69 6d 65 5f 6e 73 65 63 22 2c 20 34 2c 20 7c 65  ime_nsec", 4, |e
1470: 7c 20 6d 6f 64 69 66 69 65 64 5f 74 69 6d 65 2e  | modified_time.
1480: 6e 73 65 63 2e 65 6e 63 6f 64 65 28 65 29 29 3f  nsec.encode(e))?
1490: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 2e  ;.            e.
14a0: 65 6d 69 74 5f 73 74 72 75 63 74 5f 66 69 65 6c  emit_struct_fiel
14b0: 64 28 22 75 73 65 72 5f 6d 65 74 61 64 61 74 61  d("user_metadata
14c0: 22 2c 20 35 2c 20 7c 65 7c 20 73 65 6c 66 2e 75  ", 5, |e| self.u
14d0: 73 65 72 5f 6d 65 74 61 64 61 74 61 2e 65 6e 63  ser_metadata.enc
14e0: 6f 64 65 28 65 29 29 3f 3b 0a 20 20 20 20 20 20  ode(e))?;.      
14f0: 20 20 20 20 20 20 65 2e 65 6d 69 74 5f 73 74 72        e.emit_str
1500: 75 63 74 5f 66 69 65 6c 64 28 22 64 61 74 61 5f  uct_field("data_
1510: 6d 61 70 5f 6e 61 6d 65 22 2c 20 36 2c 20 7c 65  map_name", 6, |e
1520: 7c 20 73 65 6c 66 2e 64 61 74 61 5f 6d 61 70 5f  | self.data_map_
1530: 6e 61 6d 65 2e 65 6e 63 6f 64 65 28 65 29 29 3f  name.encode(e))?
1540: 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 4f  ;..            O
1550: 6b 28 28 29 29 0a 20 20 20 20 20 20 20 20 7d 29  k(()).        })
1560: 0a 20 20 20 20 7d 0a 7d 0a 0a 69 6d 70 6c 20 44  .    }.}..impl D
1570: 65 63 6f 64 61 62 6c 65 20 66 6f 72 20 46 69 6c  ecodable for Fil
1580: 65 20 7b 0a 20 20 20 20 66 6e 20 64 65 63 6f 64  e {.    fn decod
1590: 65 3c 44 3a 20 44 65 63 6f 64 65 72 3e 28 64 3a  e<D: Decoder>(d:
15a0: 20 26 6d 75 74 20 44 29 20 2d 3e 20 52 65 73 75   &mut D) -> Resu
15b0: 6c 74 3c 46 69 6c 65 2c 20 44 3a 3a 45 72 72 6f  lt<File, D::Erro
15c0: 72 3e 20 7b 0a 20 20 20 20 20 20 20 20 64 2e 72  r> {.        d.r
15d0: 65 61 64 5f 73 74 72 75 63 74 28 22 46 69 6c 65  ead_struct("File
15e0: 22 2c 20 37 2c 20 7c 64 7c 20 7b 0a 20 20 20 20  ", 7, |d| {.    
15f0: 20 20 20 20 20 20 20 20 4f 6b 28 46 69 6c 65 20          Ok(File 
1600: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
1610: 20 20 73 69 7a 65 3a 20 64 2e 72 65 61 64 5f 73    size: d.read_s
1620: 74 72 75 63 74 5f 66 69 65 6c 64 28 22 73 69 7a  truct_field("siz
1630: 65 22 2c 20 30 2c 20 44 65 63 6f 64 61 62 6c 65  e", 0, Decodable
1640: 3a 3a 64 65 63 6f 64 65 29 3f 2c 0a 20 20 20 20  ::decode)?,.    
1650: 20 20 20 20 20 20 20 20 20 20 20 20 63 72 65 61              crea
1660: 74 65 64 3a 20 3a 3a 74 69 6d 65 3a 3a 61 74 5f  ted: ::time::at_
1670: 75 74 63 28 54 69 6d 65 73 70 65 63 20 7b 0a 20  utc(Timespec {. 
1680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1690: 20 20 20 73 65 63 3a 20 64 2e 72 65 61 64 5f 73     sec: d.read_s
16a0: 74 72 75 63 74 5f 66 69 65 6c 64 28 22 63 72 65  truct_field("cre
16b0: 61 74 65 64 5f 74 69 6d 65 5f 73 65 63 22 2c 20  ated_time_sec", 
16c0: 31 2c 20 44 65 63 6f 64 61 62 6c 65 3a 3a 64 65  1, Decodable::de
16d0: 63 6f 64 65 29 3f 2c 0a 20 20 20 20 20 20 20 20  code)?,.        
16e0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 73 65 63              nsec
16f0: 3a 20 64 2e 72 65 61 64 5f 73 74 72 75 63 74 5f  : d.read_struct_
1700: 66 69 65 6c 64 28 22 63 72 65 61 74 65 64 5f 74  field("created_t
1710: 69 6d 65 5f 6e 73 65 63 22 2c 20 32 2c 20 44 65  ime_nsec", 2, De
1720: 63 6f 64 61 62 6c 65 3a 3a 64 65 63 6f 64 65 29  codable::decode)
1730: 3f 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?,.             
1740: 20 20 20 7d 29 2c 0a 20 20 20 20 20 20 20 20 20     }),.         
1750: 20 20 20 20 20 20 20 6d 6f 64 69 66 69 65 64 3a         modified:
1760: 20 3a 3a 74 69 6d 65 3a 3a 61 74 5f 75 74 63 28   ::time::at_utc(
1770: 54 69 6d 65 73 70 65 63 20 7b 0a 20 20 20 20 20  Timespec {.     
1780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1790: 65 63 3a 20 64 2e 72 65 61 64 5f 73 74 72 75 63  ec: d.read_struc
17a0: 74 5f 66 69 65 6c 64 28 22 6d 6f 64 69 66 69 65  t_field("modifie
17b0: 64 5f 74 69 6d 65 5f 73 65 63 22 2c 20 33 2c 20  d_time_sec", 3, 
17c0: 44 65 63 6f 64 61 62 6c 65 3a 3a 64 65 63 6f 64  Decodable::decod
17d0: 65 29 3f 2c 0a 20 20 20 20 20 20 20 20 20 20 20  e)?,.           
17e0: 20 20 20 20 20 20 20 20 20 6e 73 65 63 3a 20 64           nsec: d
17f0: 2e 72 65 61 64 5f 73 74 72 75 63 74 5f 66 69 65  .read_struct_fie
1800: 6c 64 28 22 6d 6f 64 69 66 69 65 64 5f 74 69 6d  ld("modified_tim
1810: 65 5f 6e 73 65 63 22 2c 20 34 2c 20 44 65 63 6f  e_nsec", 4, Deco
1820: 64 61 62 6c 65 3a 3a 64 65 63 6f 64 65 29 3f 2c  dable::decode)?,
1830: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1840: 20 7d 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20   }),.           
1850: 20 20 20 20 20 75 73 65 72 5f 6d 65 74 61 64 61       user_metada
1860: 74 61 3a 20 64 2e 72 65 61 64 5f 73 74 72 75 63  ta: d.read_struc
1870: 74 5f 66 69 65 6c 64 28 22 75 73 65 72 5f 6d 65  t_field("user_me
1880: 74 61 64 61 74 61 22 2c 20 35 2c 20 44 65 63 6f  tadata", 5, Deco
1890: 64 61 62 6c 65 3a 3a 64 65 63 6f 64 65 29 3f 2c  dable::decode)?,
18a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18b0: 20 64 61 74 61 5f 6d 61 70 5f 6e 61 6d 65 3a 20   data_map_name: 
18c0: 64 2e 72 65 61 64 5f 73 74 72 75 63 74 5f 66 69  d.read_struct_fi
18d0: 65 6c 64 28 22 64 61 74 61 5f 6d 61 70 5f 6e 61  eld("data_map_na
18e0: 6d 65 22 2c 20 36 2c 20 44 65 63 6f 64 61 62 6c  me", 6, Decodabl
18f0: 65 3a 3a 64 65 63 6f 64 65 29 3f 2c 0a 20 20 20  e::decode)?,.   
1900: 20 20 20 20 20 20 20 20 20 7d 29 0a 20 20 20 20           }).    
1910: 20 20 20 20 7d 29 0a 20 20 20 20 7d 0a 7d 0a 0a      }).    }.}..
1920: 23 5b 63 66 67 28 74 65 73 74 29 5d 0a 6d 6f 64  #[cfg(test)].mod
1930: 20 74 65 73 74 73 20 7b 0a 20 20 20 20 75 73 65   tests {.    use
1940: 20 73 75 70 65 72 3a 3a 2a 3b 0a 20 20 20 20 75   super::*;.    u
1950: 73 65 20 6d 61 69 64 73 61 66 65 5f 75 74 69 6c  se maidsafe_util
1960: 69 74 69 65 73 3a 3a 73 65 72 69 61 6c 69 73 61  ities::serialisa
1970: 74 69 6f 6e 3a 3a 7b 64 65 73 65 72 69 61 6c 69  tion::{deseriali
1980: 73 65 2c 20 73 65 72 69 61 6c 69 73 65 7d 3b 0a  se, serialise};.
1990: 0a 20 20 20 20 23 5b 74 65 73 74 5d 0a 20 20 20  .    #[test].   
19a0: 20 66 6e 20 73 65 72 69 61 6c 69 73 65 5f 64 65   fn serialise_de
19b0: 73 65 72 69 61 6c 69 73 65 28 29 20 7b 0a 20 20  serialise() {.  
19c0: 20 20 20 20 20 20 6c 65 74 20 6f 62 6a 5f 62 65        let obj_be
19d0: 66 6f 72 65 20 3d 20 46 69 6c 65 3a 3a 6e 65 77  fore = File::new
19e0: 28 22 7b 6d 69 6d 65 3a 5c 22 61 70 70 6c 69 63  ("{mime:\"applic
19f0: 61 74 69 6f 6e 2f 6a 73 6f 6e 5c 22 7d 22 0a 20  ation/json\"}". 
1a00: 20 20 20 20 20 20 20 20 20 20 20 2e 74 6f 5f 73             .to_s
1a10: 74 72 69 6e 67 28 29 0a 20 20 20 20 20 20 20 20  tring().        
1a20: 20 20 20 20 2e 69 6e 74 6f 5f 62 79 74 65 73 28      .into_bytes(
1a30: 29 29 3b 0a 20 20 20 20 20 20 20 20 6c 65 74 20  ));.        let 
1a40: 73 65 72 69 61 6c 69 73 65 64 5f 64 61 74 61 20  serialised_data 
1a50: 3d 20 75 6e 77 72 61 70 21 28 73 65 72 69 61 6c  = unwrap!(serial
1a60: 69 73 65 28 26 6f 62 6a 5f 62 65 66 6f 72 65 29  ise(&obj_before)
1a70: 29 3b 0a 20 20 20 20 20 20 20 20 6c 65 74 20 6f  );.        let o
1a80: 62 6a 5f 61 66 74 65 72 20 3d 20 75 6e 77 72 61  bj_after = unwra
1a90: 70 21 28 64 65 73 65 72 69 61 6c 69 73 65 28 26  p!(deserialise(&
1aa0: 73 65 72 69 61 6c 69 73 65 64 5f 64 61 74 61 29  serialised_data)
1ab0: 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
1ac0: 74 5f 65 71 21 28 6f 62 6a 5f 62 65 66 6f 72 65  t_eq!(obj_before
1ad0: 2c 20 6f 62 6a 5f 61 66 74 65 72 29 3b 0a 20 20  , obj_after);.  
1ae0: 20 20 7d 0a 7d 0a                                  }.}.