gin-tonic-core 0.8.9

core functions for gin-tonic
Documentation
use crate::{Scalar, scalars::SInt64, wire_types::WIRE_TYPE_VARINT};

impl Scalar<SInt64> for i64 {
    const WIRE_TYPE: u8 = WIRE_TYPE_VARINT;

    fn encode(&self, encoder: &mut impl crate::Encode) {
        encoder.encode_sint64(*self);
    }

    fn decode(decoder: &mut impl crate::Decode) -> Result<Self, crate::error::ProtoError>
    where
        Self: Sized,
    {
        decoder.decode_sint64()
    }
}

#[cfg(test)]
mod test {
    #[test]
    fn encode_decode() {
        let test_cases = [
            (0, 1, b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"),
            (1, 1, b"\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00"),
            (63, 1, b"\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00"),
            (64, 2, b"\x80\x01\x00\x00\x00\x00\x00\x00\x00\x00"),
            (8_191, 2, b"\xfe\x7f\x00\x00\x00\x00\x00\x00\x00\x00"),
            (8_192, 3, b"\x80\x80\x01\x00\x00\x00\x00\x00\x00\x00"),
            (1_048_575, 3, b"\xfe\xff\x7f\x00\x00\x00\x00\x00\x00\x00"),
            (1_048_576, 4, b"\x80\x80\x80\x01\x00\x00\x00\x00\x00\x00"),
            (134_217_727, 4, b"\xfe\xff\xff\x7f\x00\x00\x00\x00\x00\x00"),
            (134_217_728, 5, b"\x80\x80\x80\x80\x01\x00\x00\x00\x00\x00"),
            (
                17_179_869_183,
                5,
                b"\xfe\xff\xff\xff\x7f\x00\x00\x00\x00\x00",
            ),
            (
                17_179_869_184,
                6,
                b"\x80\x80\x80\x80\x80\x01\x00\x00\x00\x00",
            ),
            (
                2_199_023_255_551,
                6,
                b"\xfe\xff\xff\xff\xff\x7f\x00\x00\x00\x00",
            ),
            (
                2_199_023_255_552,
                7,
                b"\x80\x80\x80\x80\x80\x80\x01\x00\x00\x00",
            ),
            (
                281_474_976_710_655,
                7,
                b"\xfe\xff\xff\xff\xff\xff\x7f\x00\x00\x00",
            ),
            (
                281_474_976_710_656,
                8,
                b"\x80\x80\x80\x80\x80\x80\x80\x01\x00\x00",
            ),
            (
                36_028_797_018_963_967,
                8,
                b"\xfe\xff\xff\xff\xff\xff\xff\x7f\x00\x00",
            ),
            (
                36_028_797_018_963_968,
                9,
                b"\x80\x80\x80\x80\x80\x80\x80\x80\x01\x00",
            ),
            (
                4_611_686_018_427_387_903,
                9,
                b"\xfe\xff\xff\xff\xff\xff\xff\xff\x7f\x00",
            ),
            (
                4_611_686_018_427_387_904,
                10,
                b"\x80\x80\x80\x80\x80\x80\x80\x80\x80\x01",
            ),
            (i64::MAX, 10, b"\xfe\xff\xff\xff\xff\xff\xff\xff\xff\x01"),
            (-1, 1, b"\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00"),
            (-64, 1, b"\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00"),
            (-65, 2, b"\x81\x01\x00\x00\x00\x00\x00\x00\x00\x00"),
            (-8_192, 2, b"\xff\x7f\x00\x00\x00\x00\x00\x00\x00\x00"),
            (-8_193, 3, b"\x81\x80\x01\x00\x00\x00\x00\x00\x00\x00"),
            (-1_048_576, 3, b"\xff\xff\x7f\x00\x00\x00\x00\x00\x00\x00"),
            (-1_048_577, 4, b"\x81\x80\x80\x01\x00\x00\x00\x00\x00\x00"),
            (-134_217_728, 4, b"\xff\xff\xff\x7f\x00\x00\x00\x00\x00\x00"),
            (-134_217_729, 5, b"\x81\x80\x80\x80\x01\x00\x00\x00\x00\x00"),
            (
                -17_179_869_184,
                5,
                b"\xff\xff\xff\xff\x7f\x00\x00\x00\x00\x00",
            ),
            (
                -17_179_869_185,
                6,
                b"\x81\x80\x80\x80\x80\x01\x00\x00\x00\x00",
            ),
            (
                -2_199_023_255_552,
                6,
                b"\xff\xff\xff\xff\xff\x7f\x00\x00\x00\x00",
            ),
            (
                -2_199_023_255_553,
                7,
                b"\x81\x80\x80\x80\x80\x80\x01\x00\x00\x00",
            ),
            (
                -281_474_976_710_656,
                7,
                b"\xff\xff\xff\xff\xff\xff\x7f\x00\x00\x00",
            ),
            (
                -281_474_976_710_657,
                8,
                b"\x81\x80\x80\x80\x80\x80\x80\x01\x00\x00",
            ),
            (
                -36_028_797_018_963_968,
                8,
                b"\xff\xff\xff\xff\xff\xff\xff\x7f\x00\x00",
            ),
            (
                -36_028_797_018_963_969,
                9,
                b"\x81\x80\x80\x80\x80\x80\x80\x80\x01\x00",
            ),
            (
                -4_611_686_018_427_387_904,
                9,
                b"\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x00",
            ),
            (
                -4_611_686_018_427_387_905,
                10,
                b"\x81\x80\x80\x80\x80\x80\x80\x80\x80\x01",
            ),
            (i64::MIN, 10, b"\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01"),
        ];

        for (value, expected_size, expected_bytes) in test_cases {
            crate::scalars::test_scalar_encode_decode::<_, super::SInt64>(
                value,
                expected_size,
                expected_bytes,
            );
        }
    }
}