我正在 Dhall 中创建 AWS Step Function 定义。但是,我不知道如何创建他们用于Choice
状态的通用结构,例如下面的示例:
{
"Not": {
"Variable": "$.type",
"StringEquals": "Private"
},
"Next": "Public"
}
使用andNot
非常简单。如果我定义一个基本比较:mapKey
mapValue
{ Type =
{ Variable : Text
, StringEquals : Optional Text
}
, default =
{ Variable = "foo"
, StringEquals = None Text
}
}
和类型:
let ComparisonType = < And | Or | Not >
Text
并添加一个辅助函数来呈现类型mapKey
:
let renderComparisonType = \(comparisonType : ComparisonType )
-> merge
{ And = "And"
, Or = "Or"
, Not = "Not"
}
comparisonType
然后我可以在函数中使用它们来中途生成记录:
let renderRuleComparisons =
\( comparisonType : ComparisonType ) ->
\( comparisons : List ComparisonOperator.Type ) ->
let keyName = renderComparisonType comparisonType
let compare = [ { mapKey = keyName, mapValue = comparisons } ]
in compare
如果我使用以下方法运行它:
let rando = ComparisonOperator::{ Variable = "$.name", StringEquals = Some "Cow" }
let comparisons = renderRuleComparisons ComparisonType.Not [ rando ]
in comparisons
使用dhall-to-json
,她将输出第一部分:
{
"Not": {
"Variable": "$.name",
"StringEquals": "Cow"
}
}
...但我一直在努力将其与"Next": "Sup"
. 我已经使用了所有的记录合并,如/\
,//
等,它不断给我各种类型的错误,我还没有真正理解。