diff --git a/tripod-id/build.rs b/tripod-id/build.rs index e596d5e..05f3424 100644 --- a/tripod-id/build.rs +++ b/tripod-id/build.rs @@ -1,7 +1,11 @@ fn main() -> Result<(), Box> { #[cfg(feature="prost")] prost_build::compile_protos( - &["proto/tripod_id.proto"], + &[ + "proto/tripod_id/single.proto", + "proto/tripod_id/double.proto", + "proto/tripod_id/triple.proto" + ], &["proto/"] )?; Ok(()) diff --git a/tripod-id/proto/tripod_id.proto b/tripod-id/proto/tripod_id.proto deleted file mode 100644 index e05c272..0000000 --- a/tripod-id/proto/tripod_id.proto +++ /dev/null @@ -1,17 +0,0 @@ -syntax = "proto3"; -package tripod_id; - -// Single size tripod id message -message Single { - uint32 id = 1; -} - -// Double size tripod id message -message Double { - uint32 id = 1; -} - -// Triple size tripod id message -message Triple { - uint64 id = 1; -} diff --git a/tripod-id/proto/tripod_id/double.proto b/tripod-id/proto/tripod_id/double.proto new file mode 100644 index 0000000..de43ee6 --- /dev/null +++ b/tripod-id/proto/tripod_id/double.proto @@ -0,0 +1,7 @@ +syntax = "proto3"; +package tripod_id; + +// Double size tripod id message +message Double { + uint32 id = 1; +} diff --git a/tripod-id/proto/tripod_id/single.proto b/tripod-id/proto/tripod_id/single.proto new file mode 100644 index 0000000..fa1943f --- /dev/null +++ b/tripod-id/proto/tripod_id/single.proto @@ -0,0 +1,7 @@ +syntax = "proto3"; +package tripod_id; + +// Single size tripod id message +message Single { + uint32 id = 1; +} diff --git a/tripod-id/proto/tripod_id/triple.proto b/tripod-id/proto/tripod_id/triple.proto new file mode 100644 index 0000000..c26e2cd --- /dev/null +++ b/tripod-id/proto/tripod_id/triple.proto @@ -0,0 +1,7 @@ +syntax = "proto3"; +package tripod_id; + +// Triple size tripod id message +message Triple { + uint64 id = 1; +} diff --git a/tripod-id/src/prost/double.rs b/tripod-id/src/prost/double.rs index 8e34f0b..f1e6c44 100644 --- a/tripod-id/src/prost/double.rs +++ b/tripod-id/src/prost/double.rs @@ -1,6 +1,6 @@ use prost::Name; -use crate::{prost::{Double, TripodIdMessage}, Error, TripodId}; +use crate::{prost::{Double, TripodIdMessage}, Error}; impl Name for Double { const NAME: &'static str = "Double"; @@ -26,4 +26,28 @@ impl TryFrom for crate::Double { value.id ) } +} + +#[cfg(test)] +mod tests { + use crate::{Double, DoubleMessage, TripodId}; + + #[test] + fn nil() { + let nil = DoubleMessage{id: 0}; + assert_eq!(Double::NIL, Double::try_from(nil).unwrap()); + } + + #[test] + fn max() { + let max = DoubleMessage{id: u32::from(Double::CAPACITY)-1}; + assert_eq!(Double::MAX, Double::try_from(max).unwrap()); + } + + #[test] + #[should_panic] + fn oversized () { + let oversized = DoubleMessage{id: u32::from(Double::CAPACITY)}; + let _ = Double::try_from(oversized).unwrap(); + } } \ No newline at end of file diff --git a/tripod-id/src/prost/mod.rs b/tripod-id/src/prost/mod.rs index 455b4a3..8774b84 100644 --- a/tripod-id/src/prost/mod.rs +++ b/tripod-id/src/prost/mod.rs @@ -1,17 +1,20 @@ -pub mod generated { - include!(concat!(env!("OUT_DIR"), "/tripod_id.rs")); -} - mod single; mod double; mod triple; -pub use generated::*; - use crate::TripodId; + const PACKAGE_NAME: &'static str = "tripod_id"; + +include!(concat!(env!("OUT_DIR"), "/tripod_id.rs")); + +/// Alias of single tripod-id message pub type SingleMessage = Single; + +/// Alias of double tripod-id message pub type DoubleMessage = Double; + +/// Alias of triple tripod-id message pub type TripleMessage = Triple; pub trait TripodIdMessage: From { diff --git a/tripod-id/src/prost/triple.rs b/tripod-id/src/prost/triple.rs index 9da6fc6..e4de831 100644 --- a/tripod-id/src/prost/triple.rs +++ b/tripod-id/src/prost/triple.rs @@ -1,6 +1,6 @@ use prost::Name; -use crate::{prost::{Triple, TripodIdMessage}, Error, TripodId}; +use crate::{prost::{Triple, TripodIdMessage}, Error}; impl Name for Triple { const NAME: &'static str = "Triple"; @@ -26,4 +26,28 @@ impl TryFrom for crate::Triple { value.id ) } +} + +#[cfg(test)] +mod tests { + use crate::{Triple, TripleMessage, TripodId}; + + #[test] + fn nil() { + let nil = TripleMessage{id: 0}; + assert_eq!(Triple::NIL, Triple::try_from(nil).unwrap()); + } + + #[test] + fn max() { + let max = TripleMessage{id: u64::from(Triple::CAPACITY)-1}; + assert_eq!(Triple::MAX, Triple::try_from(max).unwrap()); + } + + #[test] + #[should_panic] + fn oversized () { + let oversized = TripleMessage{id: u64::from(Triple::CAPACITY)}; + let _ = Triple::try_from(oversized).unwrap(); + } } \ No newline at end of file diff --git a/tripod-id/src/utils.rs b/tripod-id/src/utils.rs index 99a0800..45fe5e8 100644 --- a/tripod-id/src/utils.rs +++ b/tripod-id/src/utils.rs @@ -1,7 +1,3 @@ -use std::str::FromStr; - -use crate::Single; - /// Test if the character is valid delimiter. pub fn is_delimiter(c: char) -> bool { match c {