161 lines
3.7 KiB
Plaintext
161 lines
3.7 KiB
Plaintext
==================
|
|
Top-level fields
|
|
==================
|
|
host = String;
|
|
port = Int & > 443 default 8080;
|
|
---
|
|
|
|
(source_file
|
|
(field_definition
|
|
path: (field_path (identifier))
|
|
value: (identifier))
|
|
(field_definition
|
|
path: (field_path (identifier))
|
|
value: (default_expression
|
|
base: (binary_expression
|
|
left: (identifier)
|
|
right: (comparison_constraint
|
|
value: (integer)))
|
|
fallback: (literal (integer)))))
|
|
|
|
==================
|
|
Import and function
|
|
==================
|
|
let
|
|
schema = import "./schema.dcdl";
|
|
mk = (cfg: schema.Service) => cfg;
|
|
in
|
|
mk({ name = "api"; })
|
|
---
|
|
|
|
(source_file
|
|
(let_expression
|
|
(field_definition
|
|
path: (field_path (identifier))
|
|
value: (import_expression
|
|
specifier: (string)))
|
|
(field_definition
|
|
path: (field_path (identifier))
|
|
value: (function_expression
|
|
(parameter
|
|
name: (identifier)
|
|
constraint: (path_expression
|
|
object: (identifier)
|
|
field: (identifier)))
|
|
body: (identifier)))
|
|
body: (call_expression
|
|
function: (identifier)
|
|
(object
|
|
(field_definition
|
|
path: (field_path (identifier))
|
|
value: (literal (string)))))))
|
|
|
|
==================
|
|
Match and patch
|
|
==================
|
|
base // {
|
|
summary = match env {
|
|
"prod": "production";
|
|
_: "other";
|
|
};
|
|
}
|
|
---
|
|
|
|
(source_file
|
|
(binary_expression
|
|
left: (identifier)
|
|
right: (object
|
|
(field_definition
|
|
path: (field_path (identifier))
|
|
value: (match_expression
|
|
scrutinee: (identifier)
|
|
(match_arm
|
|
pattern: (literal (string))
|
|
body: (literal (string)))
|
|
(match_arm
|
|
body: (literal (string))))))))
|
|
|
|
==================
|
|
Arithmetic
|
|
==================
|
|
{
|
|
value = 1 + 2 * 3;
|
|
grouped = (1 + 2) / -3;
|
|
}
|
|
---
|
|
|
|
(source_file
|
|
(object
|
|
(field_definition
|
|
path: (field_path (identifier))
|
|
value: (binary_expression
|
|
left: (literal (integer))
|
|
right: (binary_expression
|
|
left: (literal (integer))
|
|
right: (literal (integer)))))
|
|
(field_definition
|
|
path: (field_path (identifier))
|
|
value: (binary_expression
|
|
left: (parenthesized_expression
|
|
(binary_expression
|
|
left: (literal (integer))
|
|
right: (literal (integer))))
|
|
right: (unary_expression
|
|
operand: (literal (integer)))))))
|
|
|
|
==================
|
|
Logical and comparison
|
|
==================
|
|
{
|
|
enabled = env == "prod" && replicas > 1;
|
|
disabled = !enabled || false;
|
|
}
|
|
---
|
|
|
|
(source_file
|
|
(object
|
|
(field_definition
|
|
path: (field_path (identifier))
|
|
value: (binary_expression
|
|
left: (binary_expression
|
|
left: (identifier)
|
|
right: (literal (string)))
|
|
right: (binary_expression
|
|
left: (identifier)
|
|
right: (literal (integer)))))
|
|
(field_definition
|
|
path: (field_path (identifier))
|
|
value: (binary_expression
|
|
left: (unary_expression
|
|
operand: (identifier))
|
|
right: (literal (boolean))))))
|
|
|
|
==================
|
|
Array concat
|
|
==================
|
|
{
|
|
roles = ["read"] ++ ["write", "admin"];
|
|
ports = [8000 + 80] ++ [9443];
|
|
}
|
|
---
|
|
|
|
(source_file
|
|
(object
|
|
(field_definition
|
|
path: (field_path (identifier))
|
|
value: (binary_expression
|
|
left: (array
|
|
(literal (string)))
|
|
right: (array
|
|
(literal (string))
|
|
(literal (string)))))
|
|
(field_definition
|
|
path: (field_path (identifier))
|
|
value: (binary_expression
|
|
left: (array
|
|
(binary_expression
|
|
left: (literal (integer))
|
|
right: (literal (integer))))
|
|
right: (array
|
|
(literal (integer)))))))
|