diff --git a/CHANGELOG.md b/CHANGELOG.md index cc87e37..3a21074 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,7 +12,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## Added -- Added `Sub` implementation for `UnixTimestamp` to calculate the duration between two timestamps. +- `From<$TY>` for the `EcssEnum$TY` ECSS enum type definitions. +- `Sub` implementation for `UnixTimestamp` to calculate the duration between two timestamps. ## Changed diff --git a/src/ecss/mod.rs b/src/ecss/mod.rs index 03c7a31..dd2351c 100644 --- a/src/ecss/mod.rs +++ b/src/ecss/mod.rs @@ -360,10 +360,28 @@ impl> EcssEn { } -pub type EcssEnumU8 = GenericEcssEnumWrapper; -pub type EcssEnumU16 = GenericEcssEnumWrapper; -pub type EcssEnumU32 = GenericEcssEnumWrapper; -pub type EcssEnumU64 = GenericEcssEnumWrapper; +macro_rules! generic_ecss_enum_typedefs_and_from_impls { + ($($ty:ty => $Enum:ident),*) => { + $( + pub type $Enum = GenericEcssEnumWrapper<$ty>; + + impl From<$ty> for $Enum { + fn from(value: $ty) -> Self { + Self::new(value) + } + } + )* + }; +} + +// Generates EcssEnum<$TY> type definitions as well as a From<$TY> for EcssEnum<$TY> +// implementation. +generic_ecss_enum_typedefs_and_from_impls! { + u8 => EcssEnumU8, + u16 => EcssEnumU16, + u32 => EcssEnumU32, + u64 => EcssEnumU64 +} /// Generic trait for PUS packet abstractions which can written to a raw slice as their raw /// byte representation. This is especially useful for generic abstractions which depend only