diff --git a/fsrc-core/src/events.rs b/fsrc-core/src/events.rs index 12d71a4..b2dbec8 100644 --- a/fsrc-core/src/events.rs +++ b/fsrc-core/src/events.rs @@ -22,6 +22,7 @@ pub enum Severity { pub trait HasSeverity { const SEVERITY: Severity; } + #[derive(Debug, PartialEq, Eq)] pub struct SeverityInfo {} impl HasSeverity for SeverityInfo { @@ -229,10 +230,10 @@ 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 + base: event.event.base, } } - } + }; } #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)] @@ -255,6 +256,17 @@ impl From> for EventU32 { impl_event_provider!(EventU32, EventU32TypedSev, u32, u16, u16); impl EventU32 { + /// Generate an event. The raw representation of an event has 32 bits. + /// If the passed group ID is invalid (too large), None wil be returned + /// + /// # Parameter + /// + /// * `severity`: Each event has a [severity][Severity]. The raw value of the severity will + /// be stored inside the uppermost 2 bits of the raw event ID + /// * `group_id`: Related events can be grouped using a group ID. The group ID will occupy the + /// next 14 bits after the severity. Therefore, the size is limited by dec 16383 hex 0x3FFF. + /// * `unique_id`: Each event has a unique 16 bit ID occupying the last 16 bits of the + /// raw event ID pub fn new( severity: Severity, group_id: ::GroupId, @@ -297,17 +309,8 @@ impl EventU32 { } impl EventU32TypedSev { - /// Generate an event. The raw representation of an event has 32 bits. - /// If the passed group ID is invalid (too large), None wil be returned - /// - /// # Parameter - /// - /// * `severity`: Each event has a [severity][Severity]. The raw value of the severity will - /// be stored inside the uppermost 2 bits of the raw event ID - /// * `group_id`: Related events can be grouped using a group ID. The group ID will occupy the - /// next 14 bits after the severity. Therefore, the size is limited by dec 16383 hex 0x3FFF. - /// * `unique_id`: Each event has a unique 16 bit ID occupying the last 16 bits of the - /// raw event ID + /// This is similar to [EventU32::new] but the severity is a type generic, which allows to + /// have distinct types for events with different severities pub fn new( group_id: ::GroupId, unique_id: ::UniqueId, @@ -418,6 +421,7 @@ impl EventU16 { }) } + /// Const version of [new], but panics on invalid group ID input values. pub const fn const_new( severity: Severity, group_id: ::GroupId, @@ -440,18 +444,10 @@ impl EventU16 { const_from_fn!(const_from_medium, EventU16TypedSev, SeverityMedium); const_from_fn!(const_from_high, EventU16TypedSev, SeverityHigh); } + impl EventU16TypedSev { - /// Generate a small event. The raw representation of a small event has 16 bits. - /// If the passed group ID is invalid (too large), [None] wil be returned - /// - /// # Parameter - /// - /// * `severity`: Each event has a [severity][Severity]. The raw value of the severity will - /// be stored inside the uppermost 2 bits of the raw event ID - /// * `group_id`: Related events can be grouped using a group ID. The group ID will occupy the - /// next 6 bits after the severity. Therefore, the size is limited by dec 63 hex 0x3F. - /// * `unique_id`: Each event has a unique 8 bit ID occupying the last 8 bits of the - /// raw event ID + /// This is similar to [EventU16::new] but the severity is a type generic, which allows to + /// have distinct types for events with different severities pub fn new( group_id: ::GroupId, unique_id: ::UniqueId, @@ -463,6 +459,7 @@ impl EventU16TypedSev { }) } + /// Const version of [new], but panics on invalid group ID input values. pub const fn const_new( group_id: ::GroupId, unique_id: ::UniqueId, diff --git a/fsrc-core/tests/pus_events.rs b/fsrc-core/tests/pus_events.rs index cb7e1e1..b304939 100644 --- a/fsrc-core/tests/pus_events.rs +++ b/fsrc-core/tests/pus_events.rs @@ -1,7 +1,10 @@ #![allow(dead_code, unused_imports)] +use fsrc_core::events::{ + EventU32, EventU32TypedSev, GenericEvent, HasSeverity, LargestEventRaw, LargestGroupIdRaw, + Severity, SeverityInfo, SeverityLow, SeverityMedium, +}; use std::convert::AsRef; -use fsrc_core::events::{EventU32, EventU32TypedSev, GenericEvent, HasSeverity, LargestEventRaw, LargestGroupIdRaw, Severity, SeverityInfo, SeverityLow, SeverityMedium}; #[derive(Debug)] struct GroupIdIntrospection { @@ -45,36 +48,33 @@ const TEST_GROUP_NAME_NAME: &str = "TEST_GROUP_NAME"; //#[event(desc="Some medium severity event")] const MEDIUM_SEV_EVENT_IN_OTHER_GROUP: EventU32TypedSev = EventU32TypedSev::const_new(TEST_GROUP_NAME, 0); -const MEDIUM_SEV_EVENT_IN_OTHER_GROUP_REDUCED: EventU32 = EventU32::const_from_medium(MEDIUM_SEV_EVENT_IN_OTHER_GROUP); +const MEDIUM_SEV_EVENT_IN_OTHER_GROUP_REDUCED: EventU32 = + EventU32::const_from_medium(MEDIUM_SEV_EVENT_IN_OTHER_GROUP); // Also auto-generated -const MEDIUM_SEV_EVENT_IN_OTHER_GROUP_INTROSPECTION: EventIntrospection = - EventIntrospection { - name: "MEDIUM_SEV_EVENT_IN_OTHER_GROUP", - group_id: GroupIdIntrospection { - name: TEST_GROUP_NAME_NAME, - id: TEST_GROUP_NAME, - }, - event: &MEDIUM_SEV_EVENT_IN_OTHER_GROUP_REDUCED, - info: "Some medium severity event", - }; +const MEDIUM_SEV_EVENT_IN_OTHER_GROUP_INTROSPECTION: EventIntrospection = EventIntrospection { + name: "MEDIUM_SEV_EVENT_IN_OTHER_GROUP", + group_id: GroupIdIntrospection { + name: TEST_GROUP_NAME_NAME, + id: TEST_GROUP_NAME, + }, + event: &MEDIUM_SEV_EVENT_IN_OTHER_GROUP_REDUCED, + info: "Some medium severity event", +}; const CONST_SLICE: &'static [u8] = &[0, 1, 2, 3]; -const INTROSPECTION_FOR_TEST_GROUP_0: [&EventIntrospection; 2] = [ - &INFO_EVENT_0_INTROSPECTION, - &INFO_EVENT_0_INTROSPECTION -]; +const INTROSPECTION_FOR_TEST_GROUP_0: [&EventIntrospection; 2] = + [&INFO_EVENT_0_INTROSPECTION, &INFO_EVENT_0_INTROSPECTION]; //const INTROSPECTION_FOR_TABLE: &'static [&EventIntrospection] = &INTROSPECTION_FOR_TEST_GROUP_0; -const INTROSPECTION_FOR_TEST_GROUP_NAME: [&EventIntrospection; 1] = [ - &MEDIUM_SEV_EVENT_IN_OTHER_GROUP_INTROSPECTION -]; +const INTROSPECTION_FOR_TEST_GROUP_NAME: [&EventIntrospection; 1] = + [&MEDIUM_SEV_EVENT_IN_OTHER_GROUP_INTROSPECTION]; //const BLAH: &'static [&EventIntrospection] = &INTROSPECTION_FOR_TEST_GROUP_NAME; const ALL_EVENTS: [&[&EventIntrospection]; 2] = [ &INTROSPECTION_FOR_TEST_GROUP_0, - &INTROSPECTION_FOR_TEST_GROUP_NAME + &INTROSPECTION_FOR_TEST_GROUP_NAME, ]; #[test]