Encodes and attempts to write the given non-owning ValueRef into the Write. # Errors This function returns Error with an underlying I/O error if unable to properly write entire value. Interruption errors are handled internally by silent operation restarting. # Examples ``` use rmp::ValueRef; use rmp::encode::value_ref::write_value_ref; let mut buf = Vec::new(); let val = ValueRef::String("le m
(wr: &mut W, val: &ValueRef)
| 83 | /// assert_eq!(vec![0xaa, 0x6c, 0x65, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65], buf); |
| 84 | /// ``` |
| 85 | pub fn write_value_ref<W>(wr: &mut W, val: &ValueRef) -> Result<(), Error> |
| 86 | where W: Write |
| 87 | { |
| 88 | match val { |
| 89 | &ValueRef::Nil => try!(write_nil(wr)), |
| 90 | &ValueRef::Boolean(val) => try!(write_bool(wr, val)), |
| 91 | &ValueRef::Integer(Integer::U64(val)) => { |
| 92 | try!(write_uint(wr, val)); |
| 93 | } |
| 94 | &ValueRef::Integer(Integer::I64(val)) => { |
| 95 | try!(write_sint(wr, val)); |
| 96 | } |
| 97 | // TODO: Replace with generic write_float(...). |
| 98 | &ValueRef::Float(Float::F32(val)) => try!(write_f32(wr, val)), |
| 99 | &ValueRef::Float(Float::F64(val)) => try!(write_f64(wr, val)), |
| 100 | &ValueRef::String(val) => { |
| 101 | try!(write_str(wr, val)); |
| 102 | } |
| 103 | &ValueRef::Binary(val) => { |
| 104 | try!(write_bin(wr, val)); |
| 105 | } |
| 106 | &ValueRef::Array(ref val) => { |
| 107 | let len = val.len() as u32; |
| 108 | |
| 109 | try!(write_array_len(wr, len)); |
| 110 | |
| 111 | for item in val { |
| 112 | try!(write_value_ref(wr, item)); |
| 113 | } |
| 114 | } |
| 115 | &ValueRef::Map(ref val) => { |
| 116 | let len = val.len() as u32; |
| 117 | |
| 118 | try!(write_map_len(wr, len)); |
| 119 | |
| 120 | for &(ref key, ref val) in val { |
| 121 | try!(write_value_ref(wr, key)); |
| 122 | try!(write_value_ref(wr, val)); |
| 123 | } |
| 124 | } |
| 125 | &ValueRef::Ext(ty, data) => { |
| 126 | try!(write_ext_meta(wr, data.len() as u32, ty)); |
| 127 | try!(wr.write_all(data).map_err(|err| ValueWriteError::InvalidDataWrite(WriteError(err)))); |
| 128 | } |
| 129 | } |
| 130 | |
| 131 | Ok(()) |
| 132 | } |
| 133 | |
| 134 | #[cfg(test)] |
| 135 | mod test { |