DAML codegen¶
Introduction¶
You can use the DAML codegen to generate Java, Scala, and JavaScript/TypeScript classes representing DAML contract templates.
These classes incorporate all boilerplate code for constructing corresponding ledger com.daml.ledger.api.v1.CreateCommand
,
com.daml.ledger.api.v1.ExerciseCommand
, com.daml.ledger.api.v1.ExerciseByKeyCommand
, and com.daml.ledger.api.v1.CreateAndExerciseCommand
.
Running the DAML codegen¶
The basic command to run the DAML codegen is:
There are two modes:
- Command line configuration, specifying all settings in the command line (all codegens supported)
- Project file configuration, specifying all settings in the
daml.yaml
(currently Java and Scala only)
Command line configuration¶
Help for each specific codegen:
Java and Scala codegens take the same set of configuration settings:
<DAR-file[=package-prefix]>...
DAR file to use as input of the codegen with an optional, but recommend, package prefix for the generated sources.
-o, --output-directory <value>
Output directory for the generated sources
-d, --decoderClass <value>
Fully Qualified Class Name of the optional Decoder utility
-V, --verbosity <value> Verbosity between 0 (only show errors) and 4 (show all messages) -- defaults to 0
-r, --root <value> Regular expression for fully-qualified names of templates to generate -- defaults to .*
--help This help text
JavaScript/TypeScript codegen takes a different set of configuration settings:
Project file configuration (Java and Scala)¶
For Java and Scala the above settings can be configured in the codegen
element of the DAML project file daml.yaml
.
At present the JavaScript/TypeScript codegen
does not support this. See this issue for status on this feature.
Here is an example:
sdk-version: 1.2.0
name: quickstart
source: daml
scenario: Main:setup
parties:
- Alice
- Bob
- USD_Bank
- EUR_Bank
version: 0.0.1
exposed-modules:
- Main
dependencies:
- daml-prim
- daml-stdlib
codegen:
java:
package-prefix: com.daml.quickstart.iou
output-directory: java-codegen/src/main/java
verbosity: 2
scala:
package-prefix: com.daml.quickstart.iou
output-directory: scala-codegen/src/main/scala
verbosity: 2
You can then run the above configuration to generate your Java or Scala code:
The equivalent Java or Scala command line configuration would be:
In order to compile the resulting Java or Scala classes, you need to add the corresponding dependencies to your build tools.
For Scala, you can depend on:
For Java, add the following Maven dependency:
Note
Replace YOUR_SDK_VERSION
with the version of your DAML SDK