completion and fixes

This commit is contained in:
Robin Müller 2022-10-25 23:32:12 +02:00
parent ac8718f1af
commit d93dd92fda
No known key found for this signature in database
GPG Key ID: 71B58F8A3CDFA9AC
2 changed files with 44 additions and 18 deletions

View File

@ -225,6 +225,16 @@ macro_rules! try_from_impls {
}; };
} }
macro_rules! const_from_fn {
($from_fn_name: ident, $TypedIdent: ident, $SevIdent: ident) => {
pub const fn $from_fn_name(event: $TypedIdent<$SevIdent>) -> Self {
Self {
base: event.event.base
}
}
}
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)] #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
pub struct EventU32 { pub struct EventU32 {
base: EventBase<u32, u16, u16>, base: EventBase<u32, u16, u16>,
@ -280,16 +290,10 @@ impl EventU32 {
} }
} }
pub const fn const_from_info(event: EventU32TypedSev<SeverityInfo>) -> Self { const_from_fn!(const_from_info, EventU32TypedSev, SeverityInfo);
Self { const_from_fn!(const_from_low, EventU32TypedSev, SeverityLow);
base: event.event.base const_from_fn!(const_from_medium, EventU32TypedSev, SeverityMedium);
} const_from_fn!(const_from_high, EventU32TypedSev, SeverityHigh);
}
pub const fn const_from_medium(event: EventU32TypedSev<SeverityMedium>) -> Self {
Self {
base: event.event.base
}
}
} }
impl<SEVERITY: HasSeverity> EventU32TypedSev<SEVERITY> { impl<SEVERITY: HasSeverity> EventU32TypedSev<SEVERITY> {
@ -431,6 +435,10 @@ impl EventU16 {
}, },
} }
} }
const_from_fn!(const_from_info, EventU16TypedSev, SeverityInfo);
const_from_fn!(const_from_low, EventU16TypedSev, SeverityLow);
const_from_fn!(const_from_medium, EventU16TypedSev, SeverityMedium);
const_from_fn!(const_from_high, EventU16TypedSev, SeverityHigh);
} }
impl<SEVERITY: HasSeverity> EventU16TypedSev<SEVERITY> { impl<SEVERITY: HasSeverity> EventU16TypedSev<SEVERITY> {
/// Generate a small event. The raw representation of a small event has 16 bits. /// Generate a small event. The raw representation of a small event has 16 bits.
@ -532,6 +540,9 @@ mod tests {
const HIGH_SEV_EVENT_SMALL: EventU16TypedSev<SeverityHigh> = const HIGH_SEV_EVENT_SMALL: EventU16TypedSev<SeverityHigh> =
EventU16TypedSev::const_new(0x3F, 0xff); EventU16TypedSev::const_new(0x3F, 0xff);
/// This working is a test in itself.
const INFO_REDUCED: EventU32 = EventU32::const_from_info(INFO_EVENT);
#[test] #[test]
fn test_normal_from_raw_conversion() { fn test_normal_from_raw_conversion() {
let conv_from_raw = EventU32TypedSev::<SeverityInfo>::try_from(INFO_EVENT.raw()) let conv_from_raw = EventU32TypedSev::<SeverityInfo>::try_from(INFO_EVENT.raw())
@ -693,4 +704,19 @@ mod tests {
let invalid = Severity::HIGH as u8 + 1; let invalid = Severity::HIGH as u8 + 1;
assert!(Severity::try_from(invalid).is_err()); assert!(Severity::try_from(invalid).is_err());
} }
#[test]
fn reduction() {
let event = EventU32TypedSev::<SeverityInfo>::const_new(1, 1);
let raw = event.raw();
let reduced: EventU32 = event.into();
assert_eq!(reduced.group_id(), 1);
assert_eq!(reduced.unique_id(), 1);
assert_eq!(raw, reduced.raw());
}
#[test]
fn const_reducation() {
assert_eq!(INFO_REDUCED.raw(), INFO_EVENT.raw());
}
} }

View File

@ -40,7 +40,7 @@ const SOME_LOW_SEV_EVENT: EventU32TypedSev<SeverityLow> = EventU32TypedSev::cons
//#[event_group] //#[event_group]
const TEST_GROUP_NAME: u16 = 1; const TEST_GROUP_NAME: u16 = 1;
// Auto-generated? // Auto-generated?
const TEST_GROUP_NAME_NAME: &'static str = "TEST_GROUP_NAME"; const TEST_GROUP_NAME_NAME: &str = "TEST_GROUP_NAME";
//#[event(desc="Some medium severity event")] //#[event(desc="Some medium severity event")]
const MEDIUM_SEV_EVENT_IN_OTHER_GROUP: EventU32TypedSev<SeverityMedium> = const MEDIUM_SEV_EVENT_IN_OTHER_GROUP: EventU32TypedSev<SeverityMedium> =
@ -60,21 +60,21 @@ const MEDIUM_SEV_EVENT_IN_OTHER_GROUP_INTROSPECTION: EventIntrospection =
}; };
const CONST_SLICE: &'static [u8] = &[0, 1, 2, 3]; const CONST_SLICE: &'static [u8] = &[0, 1, 2, 3];
const INTROSPECTION_FOR_TEST_GROUP_0: [&'static EventIntrospection; 2] = [ const INTROSPECTION_FOR_TEST_GROUP_0: [&EventIntrospection; 2] = [
&INFO_EVENT_0_INTROSPECTION, &INFO_EVENT_0_INTROSPECTION,
&INFO_EVENT_0_INTROSPECTION &INFO_EVENT_0_INTROSPECTION
]; ];
const INTROSPECTION_FOR_TABLE: &'static [&EventIntrospection] = &INTROSPECTION_FOR_TEST_GROUP_0; //const INTROSPECTION_FOR_TABLE: &'static [&EventIntrospection] = &INTROSPECTION_FOR_TEST_GROUP_0;
const INTROSPECTION_FOR_TEST_GROUP_NAME: [&'static EventIntrospection; 1] = [ const INTROSPECTION_FOR_TEST_GROUP_NAME: [&EventIntrospection; 1] = [
&MEDIUM_SEV_EVENT_IN_OTHER_GROUP_INTROSPECTION &MEDIUM_SEV_EVENT_IN_OTHER_GROUP_INTROSPECTION
]; ];
const BLAH: &'static [&EventIntrospection] = &INTROSPECTION_FOR_TEST_GROUP_NAME; //const BLAH: &'static [&EventIntrospection] = &INTROSPECTION_FOR_TEST_GROUP_NAME;
const ALL_EVENTS: [&'static [&EventIntrospection]; 2] = [ const ALL_EVENTS: [&[&EventIntrospection]; 2] = [
INTROSPECTION_FOR_TABLE, &INTROSPECTION_FOR_TEST_GROUP_0,
BLAH &INTROSPECTION_FOR_TEST_GROUP_NAME
]; ];
#[test] #[test]