better DSL for rule