accordproject / concerto

Business schema language and runtime
https://concerto.accordproject.org
Apache License 2.0
121 stars 106 forks source link

Support complex objects as decorator argument values #918

Open dselman opened 1 month ago

dselman commented 1 month ago

Feature Request 🛍️

Currently decorator arguments are limited to:

It would be useful to support a stringified arbitrary object as a decorator argument value.

Use Case

Automated systems creating models and storing complex decorator arguments on the model.

Possible Solution

namespace org.acme@1.0.0

concept TextFormat extends Decorator {
   o String font
   o Integer fontSize
   o Boolean isBold optional
   o Boolean isItalic optonal
}

@TextFormat({"font": "arial", "fontSize" : 12, "isBold" : true})
concept TextField {
    o String value
}

Context

When decorator arguments become complex they are hard to read, because they are based on positional arguments.

Detailed Description

We would have to extend the CTO grammar to support JSON objects within decorator arguments, marshalling them into a new type of DecoratorLiteral, or extending the DecoratorStringLiteral to carry the JSON value as a string.

Extend the logic that validates decorator arguments to check the structure of the JSON conforms to the related decorator definition.