extern crate nippy; use nippy::protocol::{ LeapIndicator, Mode, ShortFormat, PrimarySource, ReadBytes, Packet, ReferenceIdentifier, ConstPackedSizeBytes, Stratum, TimestampFormat, Version, WriteBytes, }; #[test] fn packet_from_bytes() { let input = [ 20u8, 1, 3, 240, 0, 0, 0, 0, 0, 0, 0, 24, 67, 68, 77, 65, 215, 188, 128, 105, 198, 169, 46, 99, 215, 187, 177, 194, 159, 47, 120, 0, 215, 188, 128, 113, 45, 236, 230, 45, 215, 188, 128, 113, 46, 35, 158, 108, ]; let expected_output = Packet { leap_indicator: LeapIndicator::NoWarning, version: Version::V2, mode: Mode::Server, stratum: Stratum::PRIMARY, poll: 3, precision: -16, root_delay: ShortFormat { seconds: 0, fraction: 0 }, root_dispersion: ShortFormat { seconds: 0, fraction: 24 }, reference_id: ReferenceIdentifier::PrimarySource(PrimarySource::Cdma), reference_timestamp: TimestampFormat { seconds: 3619455081, fraction: 3332976227, }, origin_timestamp: TimestampFormat { seconds: 3619402178, fraction: 2670688256, }, receive_timestamp: TimestampFormat { seconds: 3619455089, fraction: 770500141, }, transmit_timestamp: TimestampFormat { seconds: 3619455089, fraction: 774086252, }, }; let packet = (&input[..]).read_bytes::().unwrap(); assert_eq!(expected_output, packet); } #[test] fn packet_to_bytes() { let expected_output = [ 20, 1, 3, 240, 0, 0, 0, 0, 0, 0, 0, 24, 67, 68, 77, 65, 215, 188, 128, 105, 198, 169, 46, 99, 215, 187, 177, 194, 159, 47, 120, 0, 215, 188, 128, 113, 45, 236, 230, 45, 215, 188, 128, 113, 46, 35, 158, 108, ]; let input = Packet { leap_indicator: LeapIndicator::NoWarning, version: Version::V2, mode: Mode::Server, stratum: Stratum::PRIMARY, poll: 3, precision: -16, root_delay: ShortFormat { seconds: 0, fraction: 0 }, root_dispersion: ShortFormat { seconds: 0, fraction: 24 }, reference_id: ReferenceIdentifier::PrimarySource(PrimarySource::Cdma), reference_timestamp: TimestampFormat { seconds: 3619455081, fraction: 3332976227, }, origin_timestamp: TimestampFormat { seconds: 3619402178, fraction: 2670688256, }, receive_timestamp: TimestampFormat { seconds: 3619455089, fraction: 770500141, }, transmit_timestamp: TimestampFormat { seconds: 3619455089, fraction: 774086252, }, }; let mut bytes = [0u8; Packet::PACKED_SIZE_BYTES]; (&mut bytes[..]).write_bytes(&input).unwrap(); assert_eq!(&bytes[..], &expected_output[..]); } #[test] fn packet_conversion_roundtrip() { let input = [ 20, 1, 3, 240, 0, 0, 0, 0, 0, 0, 0, 24, 67, 68, 77, 65, 215, 188, 128, 105, 198, 169, 46, 99, 215, 187, 177, 194, 159, 47, 120, 0, 215, 188, 128, 113, 45, 236, 230, 45, 215, 188, 128, 113, 46, 35, 158, 108, ]; let packet = (&input[..]).read_bytes::().unwrap(); let mut output = [0u8; Packet::PACKED_SIZE_BYTES]; (&mut output[..]).write_bytes(&packet).unwrap(); assert_eq!(&input[..], &output[..]); }