| 58 | /// Write a msgpack integer using the most compact encoding. |
| 59 | #[inline] |
| 60 | pub fn write_i64(buf: &mut Vec<u8>, i: i64) { |
| 61 | if (0..=127).contains(&i) { |
| 62 | buf.push(i as u8); |
| 63 | } else if (-32..0).contains(&i) { |
| 64 | buf.push(i as u8); // negative fixint |
| 65 | } else if i >= i8::MIN as i64 && i <= i8::MAX as i64 { |
| 66 | buf.push(0xD0); |
| 67 | buf.push(i as i8 as u8); |
| 68 | } else if i >= i16::MIN as i64 && i <= i16::MAX as i64 { |
| 69 | buf.push(0xD1); |
| 70 | buf.extend_from_slice(&(i as i16).to_be_bytes()); |
| 71 | } else if i >= i32::MIN as i64 && i <= i32::MAX as i64 { |
| 72 | buf.push(0xD2); |
| 73 | buf.extend_from_slice(&(i as i32).to_be_bytes()); |
| 74 | } else { |
| 75 | buf.push(0xD3); |
| 76 | buf.extend_from_slice(&i.to_be_bytes()); |
| 77 | } |
| 78 | } |
| 79 | |
| 80 | /// Write a msgpack float64. |
| 81 | #[inline] |