diff --git a/Cargo.toml b/Cargo.toml index 7fe3268..03035f1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,4 +3,4 @@ members = ["ublox", "ublox_derive"] resolver = "2" [workspace.package] -rust-version = "1.78.0" +rust-version = "1.81.0" diff --git a/examples/Cargo.toml b/examples/Cargo.toml index 3e2f144..4dfad5b 100644 --- a/examples/Cargo.toml +++ b/examples/Cargo.toml @@ -4,4 +4,4 @@ members = ["*"] resolver = "2" [workspace.package] -rust-version = "1.78.0" +rust-version = "1.81.0" diff --git a/test.sh b/test.sh new file mode 100755 index 0000000..369814b --- /dev/null +++ b/test.sh @@ -0,0 +1,41 @@ +#!/usr/bin/env bash +set -euxo pipefail + +need() { + if ! command -v "$1" > /dev/null 2>&1; then + echo "need $1 (command not found)" + exit 1 + fi +} + +cargo clippy -- -D warnings +cargo fmt --all -- --check + +FEATURE_SETS=( + "--features=alloc,std,ubx_proto23" + "--no-default-features --features=alloc,ubx_proto23" + "--no-default-features --features=ubx_proto23" + "--no-default-features --features=ubx_proto27" +) + +for features in "${FEATURE_SETS[@]}"; do + cargo build ${features} + cargo test ${features} +done + +# Examples - using a subshell to isolate directory changes +( + cd examples || exit 1 + cargo build --release + cargo fmt --all -- --check + cargo clippy --all-targets -- -D warnings + cargo hack check --rust-version --workspace +) + + +need cargo-hack +cargo hack check --rust-version --workspace +( + cd examples || exit 1 + cargo hack check --rust-version --workspace +) diff --git a/ublox/src/parser.rs b/ublox/src/parser.rs index c680715..a29d8e9 100644 --- a/ublox/src/parser.rs +++ b/ublox/src/parser.rs @@ -3,7 +3,10 @@ use alloc::vec::Vec; use crate::{ error::ParserError, - ubx_packets::{match_packet, PacketRef, MAX_PAYLOAD_LEN, SYNC_CHAR_1, SYNC_CHAR_2}, + ubx_packets::{ + packetref::{match_packet, PacketRef, MAX_PAYLOAD_LEN}, + SYNC_CHAR_1, SYNC_CHAR_2, + }, }; /// This trait represents an underlying buffer used for the Parser. We provide diff --git a/ublox/src/ubx_packets/packets.rs b/ublox/src/ubx_packets/packets.rs index 24f03d2..bf64170 100644 --- a/ublox/src/ubx_packets/packets.rs +++ b/ublox/src/ubx_packets/packets.rs @@ -11,20 +11,24 @@ use num_traits::cast::{FromPrimitive, ToPrimitive}; use num_traits::float::FloatCore; use ublox_derive::{ - define_recv_packets, ubx_extend, ubx_extend_bitflags, ubx_packet_recv, ubx_packet_recv_send, - ubx_packet_send, + ubx_extend, ubx_extend_bitflags, ubx_packet_recv, ubx_packet_recv_send, ubx_packet_send, }; use crate::error::{MemWriterError, ParserError}; #[cfg(feature = "serde")] use crate::serde::ser::SerializeMap; use crate::ubx_packets::packets::mon_ver::is_cstr_valid; +#[allow(unused_imports, reason = "It's only unused in some feature sets")] +use crate::FieldIter; use super::{ ubx_checksum, MemWriter, Position, UbxChecksumCalc, UbxPacketCreator, UbxPacketMeta, - UbxUnknownPacketRef, SYNC_CHAR_1, SYNC_CHAR_2, + SYNC_CHAR_1, SYNC_CHAR_2, }; +pub use packetref::PacketRef; +pub mod packetref; + /// Used to help serialize the packet's fields flattened within a struct containing the msg_id and class fields, but /// without using the serde FlatMapSerializer which requires alloc. #[cfg(feature = "serde")] @@ -5172,204 +5176,6 @@ struct SecUniqId { unique_id: [u8; 5], } -// TODO: how to split this in module while using the proc_macros -// in my first noob attempt I failed as the proc_macros fail due to visibility issues -#[cfg(feature = "ubx_proto23")] -define_recv_packets!( - enum PacketRef { - _ = UbxUnknownPacketRef, - AlpSrv, - AckAck, - AckNak, - CfgAnt, - CfgEsfAlg, - CfgEsfWt, - CfgItfm, - CfgGnss, - CfgNav5, - CfgOdo, - CfgPrtI2c, - CfgPrtSpi, - CfgPrtUart, - CfgSmgr, - CfgTmode2, - CfgTmode3, - CfgTp5, - EsfAlg, - EsfIns, - EsfMeas, - EsfStatus, - EsfRaw, - InfError, - InfWarning, - InfNotice, - InfTest, - InfDebug, - HnrAtt, - HnrIns, - HnrPvt, - MonVer, - MonGnss, - MonHw, - MgaAck, - MgaGpsIono, - MgaGpsEph, - MgaGloEph, - NavAtt, - NavClock, - NavDop, - NavEoe, - NavHpPosLlh, - NavHpPosEcef, - NavOdo, - NavPvt, - NavPosLlh, - NavRelPosNed, - NavSat, - NavSolution, - NavStatus, - NavVelNed, - NavTimeUTC, - NavTimeLs, - NavVelECEF, - RxmRawx, - RxmRtcm, - RxmSfrbx, - SecUniqId, - TimSvin, - TimTp, - TimTm2, - TimTos, - } -); - -#[cfg(feature = "ubx_proto27")] -define_recv_packets!( - enum PacketRef { - _ = UbxUnknownPacketRef, - AlpSrv, - AckAck, - AckNak, - CfgItfm, - CfgPrtI2c, - CfgPrtSpi, - CfgPrtUart, - CfgNav5, - CfgAnt, - CfgOdo, - CfgTmode2, - CfgTmode3, - CfgTp5, - CfgEsfAlg, - CfgEsfWt, - EsfAlg, - EsfIns, - EsfMeas, - EsfStatus, - EsfRaw, - InfError, - InfWarning, - InfNotice, - InfTest, - InfDebug, - MonVer, - MonGnss, - MonHw, - MgaAck, - MgaGpsIono, - MgaGpsEph, - MgaGloEph, - NavAtt, - NavClock, - NavDop, - NavEoe, - NavHpPosLlh, - NavHpPosEcef, - NavOdo, - NavPvt, - NavPosLlh, - NavRelPosNed, - NavSig, - NavSat, - NavSolution, - NavStatus, - NavVelNed, - NavTimeUTC, - NavTimeLs, - NavVelECEF, - RxmRawx, - RxmRtcm, - RxmSfrbx, - SecUniqId, - TimSvin, - TimTp, - TimTm2, - } -); - -#[cfg(feature = "ubx_proto31")] -define_recv_packets!( - enum PacketRef { - _ = UbxUnknownPacketRef, - AlpSrv, - AckAck, - AckNak, - CfgItfm, - CfgPrtI2c, - CfgPrtSpi, - CfgPrtUart, - CfgNav5, - CfgAnt, - CfgOdo, - CfgTmode2, - CfgTmode3, - CfgTp5, - CfgEsfAlg, - CfgEsfWt, - EsfAlg, - EsfIns, - EsfMeas, - EsfStatus, - EsfRaw, - InfError, - InfWarning, - InfNotice, - InfTest, - InfDebug, - MonVer, - MonGnss, - MonHw, - MgaAck, - MgaGpsIono, - MgaGpsEph, - MgaGloEph, - NavAtt, - NavClock, - NavDop, - NavEoe, - NavHpPosLlh, - NavHpPosEcef, - NavOdo, - NavPvt, - NavPosLlh, - NavRelPosNed, - NavSat, - NavSig, - NavSolution, - NavStatus, - NavVelNed, - NavTimeUTC, - NavTimeLs, - NavVelECEF, - RxmRawx, - RxmRtcm, - RxmSfrbx, - SecUniqId, - TimSvin, - TimTp, - TimTm2, - } -); #[cfg(test)] mod test { use super::*; diff --git a/ublox/src/ubx_packets/packets/packetref.rs b/ublox/src/ubx_packets/packets/packetref.rs new file mode 100644 index 0000000..ca775d3 --- /dev/null +++ b/ublox/src/ubx_packets/packets/packetref.rs @@ -0,0 +1,200 @@ +use super::*; +use crate::UbxUnknownPacketRef; +use ublox_derive::define_recv_packets; + +#[cfg(feature = "ubx_proto23")] +define_recv_packets!( + enum PacketRef { + _ = UbxUnknownPacketRef, + AlpSrv, + AckAck, + AckNak, + CfgAnt, + CfgEsfAlg, + CfgEsfWt, + CfgItfm, + CfgGnss, + CfgNav5, + CfgOdo, + CfgPrtI2c, + CfgPrtSpi, + CfgPrtUart, + CfgSmgr, + CfgTmode2, + CfgTmode3, + CfgTp5, + EsfAlg, + EsfIns, + EsfMeas, + EsfStatus, + EsfRaw, + InfError, + InfWarning, + InfNotice, + InfTest, + InfDebug, + HnrAtt, + HnrIns, + HnrPvt, + MonVer, + MonGnss, + MonHw, + MgaAck, + MgaGpsIono, + MgaGpsEph, + MgaGloEph, + NavAtt, + NavClock, + NavDop, + NavEoe, + NavHpPosLlh, + NavHpPosEcef, + NavOdo, + NavPvt, + NavPosLlh, + NavRelPosNed, + NavSat, + NavSolution, + NavStatus, + NavVelNed, + NavTimeUTC, + NavTimeLs, + NavVelECEF, + RxmRawx, + RxmRtcm, + RxmSfrbx, + SecUniqId, + TimSvin, + TimTp, + TimTm2, + TimTos, + } +); + +#[cfg(feature = "ubx_proto27")] +define_recv_packets!( + enum PacketRef { + _ = UbxUnknownPacketRef, + AlpSrv, + AckAck, + AckNak, + CfgItfm, + CfgPrtI2c, + CfgPrtSpi, + CfgPrtUart, + CfgNav5, + CfgAnt, + CfgOdo, + CfgTmode2, + CfgTmode3, + CfgTp5, + CfgEsfAlg, + CfgEsfWt, + EsfAlg, + EsfIns, + EsfMeas, + EsfStatus, + EsfRaw, + InfError, + InfWarning, + InfNotice, + InfTest, + InfDebug, + MonVer, + MonGnss, + MonHw, + MgaAck, + MgaGpsIono, + MgaGpsEph, + MgaGloEph, + NavAtt, + NavClock, + NavDop, + NavEoe, + NavHpPosLlh, + NavHpPosEcef, + NavOdo, + NavPvt, + NavPosLlh, + NavRelPosNed, + NavSig, + NavSat, + NavSolution, + NavStatus, + NavVelNed, + NavTimeUTC, + NavTimeLs, + NavVelECEF, + RxmRawx, + RxmRtcm, + RxmSfrbx, + SecUniqId, + TimSvin, + TimTp, + TimTm2, + } +); + +#[cfg(feature = "ubx_proto31")] +define_recv_packets!( + enum PacketRef { + _ = UbxUnknownPacketRef, + AlpSrv, + AckAck, + AckNak, + CfgItfm, + CfgPrtI2c, + CfgPrtSpi, + CfgPrtUart, + CfgNav5, + CfgAnt, + CfgOdo, + CfgTmode2, + CfgTmode3, + CfgTp5, + CfgEsfAlg, + CfgEsfWt, + EsfAlg, + EsfIns, + EsfMeas, + EsfStatus, + EsfRaw, + InfError, + InfWarning, + InfNotice, + InfTest, + InfDebug, + MonVer, + MonGnss, + MonHw, + MgaAck, + MgaGpsIono, + MgaGpsEph, + MgaGloEph, + NavAtt, + NavClock, + NavDop, + NavEoe, + NavHpPosLlh, + NavHpPosEcef, + NavOdo, + NavPvt, + NavPosLlh, + NavRelPosNed, + NavSat, + NavSig, + NavSolution, + NavStatus, + NavVelNed, + NavTimeUTC, + NavTimeLs, + NavVelECEF, + RxmRawx, + RxmRtcm, + RxmSfrbx, + SecUniqId, + TimSvin, + TimTp, + TimTm2, + } +); diff --git a/ublox/src/ubx_packets/types.rs b/ublox/src/ubx_packets/types.rs index eac27b8..efe349b 100644 --- a/ublox/src/ubx_packets/types.rs +++ b/ublox/src/ubx_packets/types.rs @@ -126,7 +126,7 @@ impl<'a> TryFrom<&NavPvtRef<'a>> for DateTime { } } -#[allow(dead_code)] +#[allow(dead_code, reason = "It is only dead code in some feature sets")] pub(crate) struct FieldIter(pub(crate) I); impl fmt::Debug for FieldIter diff --git a/ublox_derive/src/output.rs b/ublox_derive/src/output.rs index 496ab9b..238a1db 100644 --- a/ublox_derive/src/output.rs +++ b/ublox_derive/src/output.rs @@ -43,7 +43,7 @@ fn generate_serialize_impl( quote! { state.serialize_entry( stringify!(#field_name), - &crate::ubx_packets::FieldIter(self.#field_accessor()) + &FieldIter(self.#field_accessor()) )?; } } @@ -731,7 +731,7 @@ pub fn generate_code_for_parse(recv_packs: &RecvPackets) -> TokenStream { }); serializers.push(quote! { - #union_enum_name::#name(ref msg) => crate::ubx_packets::PacketSerializer { + #union_enum_name::#name(ref msg) => PacketSerializer { class: #name::CLASS, msg_id: #name::ID, msg, diff --git a/ublox_derive/src/tests.rs b/ublox_derive/src/tests.rs index 1f01048..4b6f211 100644 --- a/ublox_derive/src/tests.rs +++ b/ublox_derive/src/tests.rs @@ -298,7 +298,7 @@ fn test_ubx_packet_recv_dyn_len() { state.serialize_entry(stringify!(f1), &self.f1())?; state.serialize_entry( stringify!(rest), - &crate::ubx_packets::FieldIter(self.rest()), + &FieldIter(self.rest()), )?; Ok(()) } @@ -604,13 +604,13 @@ fn test_define_recv_packets() { S: serde::Serializer, { match *self { - PacketRef::Pack1(ref msg) => crate::ubx_packets::PacketSerializer { + PacketRef::Pack1(ref msg) => PacketSerializer { class: Pack1::CLASS, msg_id: Pack1::ID, msg, } .serialize(serializer), - PacketRef::Pack2(ref msg) => crate::ubx_packets::PacketSerializer { + PacketRef::Pack2(ref msg) => PacketSerializer { class: Pack2::CLASS, msg_id: Pack2::ID, msg,