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;
}

Authors

Copyright

License