Alias ParserEvent
The element of the InputRange returned by pullParseFile and pullParseSource.
This is a tagged union, built from the following:
alias ParserEvent = TaggedAlgebraic!ParserEventUnion;
private union ParserEventUnion
{
TagStartEvent tagStart;
TagEndEvent tagEnd;
ValueEvent value;
AttributeEvent attribute;
}
Declaration
alias ParserEvent = taggedalgebraic .TaggedAlgebraic!(sdlang.parser.ParserEventUnion);
Note
The old FileStartEvent and FileEndEvent events were deemed unnessecary and removed as of SDLang-D v0.10.0.
Note
Previously, in SDLang-D v0.9.x, ParserEvent was a std.variant.Algebraic. As of SDLang-D v0.10.0, it is now a TaggedAlgebraic, so usage has changed somewhat.
Example
// Create
ParserEvent event1 = TagStartEvent();
ParserEvent event2 = TagEndEvent();
ParserEvent event3 = ValueEvent();
ParserEvent event4 = AttributeEvent();
// Check type
assert(event1 .kind == ParserEvent .Kind .tagStart);
assert(event2 .kind == ParserEvent .Kind .tagEnd);
assert(event3 .kind == ParserEvent .Kind .value);
assert(event4 .kind == ParserEvent .Kind .attribute);
// Cast to base type
auto e1 = cast(TagStartEvent) event1;
auto e2 = cast(TagEndEvent) event2;
auto e3 = cast(ValueEvent) event3;
auto e4 = cast(AttributeEvent) event4;
//auto noGood = cast(AttributeEvent) event1; // AssertError: event1 is a TagStartEvent, not AttributeEvent.
// Use as base type.
// In many cases, no casting is even needed.
event1 .name = "foo";
//auto noGood = event3.name; // AssertError: ValueEvent doesn't have a member 'name'.
// Final switch is supported:
final switch(event1 .kind)
{
case ParserEvent .Kind .tagStart: break;
case ParserEvent .Kind .tagEnd: break;
case ParserEvent .Kind .value: break;
case ParserEvent .Kind .attribute: break;
}