|
/// Encodes and attempts to write an `i64` value into the given write using the most efficient |
|
/// representation, returning the marker used. |
|
/// |
|
/// This function obeys the MessagePack specification, which requires that the serializer SHOULD use |
|
/// the format which represents the data in the smallest number of bytes, with the exception of |
|
/// sized/unsized types. |
|
/// |
|
/// Note, that the function will **always** use signed integer representation even if the value can |
|
/// be more efficiently represented using unsigned integer encoding. |
|
/// |
|
/// The first byte becomes the marker and the others (if present, up to 9) will represent the data |
|
/// itself. |
|
/// |
|
/// # Errors |
|
/// |
|
/// This function will return `ValueWriteError` on any I/O error occurred while writing either the |
|
/// marker or the data. |
|
pub fn write_sint<W: RmpWrite>(wr: &mut W, val: i64) -> Result<Marker, ValueWriteError<W::Error>> { |
|
match val { |
|
val if -32 <= val && val < 0 => { |
|
write_nfix(wr, val as i8) |
|
.and(Ok(Marker::FixNeg(val as i8))) |
|
.map_err(ValueWriteError::InvalidMarkerWrite) |
|
} |
|
val if -128 <= val && val < -32 => write_i8(wr, val as i8).and(Ok(Marker::I8)), |
|
val if -32768 <= val && val < -128 => write_i16(wr, val as i16).and(Ok(Marker::I16)), |
|
val if -2147483648 <= val && val < -32768 => write_i32(wr, val as i32).and(Ok(Marker::I32)), |
|
val if val < -2147483648 => write_i64(wr, val).and(Ok(Marker::I64)), |
|
val if 0 <= val && val < 128 => { |
|
write_pfix(wr, val as u8) |
|
.and(Ok(Marker::FixPos(val as u8))) |
|
.map_err(ValueWriteError::InvalidMarkerWrite) |
|
} |
|
val if val < 256 => write_u8(wr, val as u8).and(Ok(Marker::U8)), |
|
val if val < 65536 => write_u16(wr, val as u16).and(Ok(Marker::U16)), |
|
val if val < 4294967296 => write_u32(wr, val as u32).and(Ok(Marker::U32)), |
|
val => write_u64(wr, val as u64).and(Ok(Marker::U64)), |
|
} |
|
} |
Hello. First of all, thank you for those great libraries.
Unless I misunderstand, the statements of lines 135-140 in the extract below do not reflect how the code is doing.
msgpack-rust/rmp/src/encode/sint.rs
Lines 132 to 170 in f4ad0d0