t { // 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;
The element of the InputRange returned by pullParseFile and pullParseSource.
This is a tagged union, built from the following:
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.