| 71 | /// Spec: <https://avro.apache.org/docs/1.11.1/specification/#binary-encoding> |
| 72 | #[inline] |
| 73 | pub(crate) fn write_long<W: Write + ?Sized>(out: &mut W, value: i64) -> Result<(), AvroError> { |
| 74 | let mut zz = ((value << 1) ^ (value >> 63)) as u64; |
| 75 | // At most 10 bytes for 64-bit varint |
| 76 | let mut buf = [0u8; 10]; |
| 77 | let mut i = 0; |
| 78 | while (zz & !0x7F) != 0 { |
| 79 | buf[i] = ((zz & 0x7F) as u8) | 0x80; |
| 80 | i += 1; |
| 81 | zz >>= 7; |
| 82 | } |
| 83 | buf[i] = (zz & 0x7F) as u8; |
| 84 | i += 1; |
| 85 | out.write_all(&buf[..i]) |
| 86 | .map_err(|e| AvroError::IoError(format!("write long: {e}"), e)) |
| 87 | } |
| 88 | |
| 89 | #[inline] |
| 90 | fn write_int<W: Write + ?Sized>(out: &mut W, value: i32) -> Result<(), AvroError> { |