Internal DSL using macros, entity example