我需要输入并生成一个包含字符串枚举值的配置。我设法定义了以下几行。最后,我需要将联合转换为字符串值。
let ParameterLocation = < Query : {}
| Header : {}
| Path : {}
| Cookie : {}
>
let ParameterObject = {
name : Text,
`in` : ParameterLocation,
required : Bool
}
let locationToText = \(loc : ParameterLocation) -> merge {
Query = \(_ : {}) -> "query",
Header = \(_ : {}) -> "header",
Path = \(_ : {}) -> "path",
Cookie = \(_ : {}) -> "cookie"
} loc
let t : ParameterObject = {
name = "organisation_id",
`in` = ParameterLocation.Query {=},
required = False
}
in t // { `in` = locationToText t.`in` }
此处包含联合/枚举的记录位于顶部,因此我可以很轻松地访问它,但是在最终配置中,ParameterObject si嵌套得很深。
有办法
答案 0 :(得分:0)
有人提议在此处的语言中添加对带有空替代(即枚举)的联合类型的支持,该合并将在两天内合并:
https://github.com/dhall-lang/dhall-lang/pull/438
一旦合并,该语言将支持更多自然枚举,如下所示:
let ParameterLocation = < Query
| Header
| Path
| Cookie
>
let locationToText = \(loc : ParameterLocation) -> merge {
Query = "query",
Header = "header",
Path = "path",
Cookie = "cookie"
} loc
...
此外,dhall-to-json
和dhall-to-yaml
将能够利用对空替代项的新内置支持,将替代项名称呈现为字符串而不是剥离标签。在标准的下一发行版(版本7.0.0)和dhall-to-json
/ dhall-to-yaml
的下一版本(1.2.8)中应该可用。