1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
use crate::model::{
definitions::StructureBody,
identifiers::{Identifier, IdentifierReference},
Span,
};
use std::fmt::Debug;
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
// ------------------------------------------------------------------------------------------------
// Public Macros
// ------------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------------
// Public Types ❱ Type Definitions ❱ Events
// ------------------------------------------------------------------------------------------------
/// Corresponds to the grammar rule `event_def`.
#[derive(Clone, Debug)]
#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
pub struct EventDef {
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
span: Option<Span>,
name: Identifier,
event_source: IdentifierReference,
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
body: Option<StructureBody>,
}
// ------------------------------------------------------------------------------------------------
// Public Types ❱ Type Definitions ❱ Events
// ------------------------------------------------------------------------------------------------
impl_has_name_for!(EventDef);
impl_has_optional_body_for!(EventDef, StructureBody);
impl_references_for!(EventDef => delegate optional body);
impl_has_source_span_for!(EventDef);
impl_maybe_invalid_for!(EventDef);
// TODO: need to include event_source in validation!!
impl_validate_for!(EventDef => delegate optional body);
impl_annotation_builder!(EventDef, optional body);
impl EventDef {
// --------------------------------------------------------------------------------------------
// Constructors
// --------------------------------------------------------------------------------------------
pub fn new(name: Identifier, event_source: IdentifierReference) -> Self {
Self {
span: None,
name,
event_source,
body: None,
}
}
// --------------------------------------------------------------------------------------------
// Fields
// --------------------------------------------------------------------------------------------
get_and_set!(pub event_source, set_event_source => IdentifierReference);
}
// ------------------------------------------------------------------------------------------------
// Private Functions
// ------------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------------
// Modules
// ------------------------------------------------------------------------------------------------