戈蒂诺-赫斯:支持多种输出语言的类型定义编译器。

[bsd2型,编译器,图书馆,程序][建议标签]

使用验证器、解码器和编码器将类型定义编译为F#、TypeScript和Python。


[跳到自述]

下载

维修人员角落

包装维护人员

对于包维护者和黑客托管者

候选人

  • 没有候选人
版本[RSS(RSS)] 1.0.0版本,第1.0.1条,1.0.2,1.1.0
更改日志 CHANGELOG.md公司
依赖关系 伊森,基础(>=4.9.1.0 && <5),fs通知,戈蒂诺-赫斯,百万帕斯卡,optparse应用程序,美剧,里约,文本[细节]
许可证 BSD-2条款
作者
维护人员 里卡德·安德森<gonz@severnatazvezda.com>
类别 编译器
已上传 通过贡兹2021-08-05T07:43:11Z
分配
可执行程序 戈蒂诺-赫斯
下载 总计546人(过去30天内有11人)
额定值 (尚未投票)[估算人贝叶斯平均]
您的评分
  • λ
  • λ
  • λ
状态 可用文档[生成日志]
上次成功报告时间:2021-08-05[所有1个报告]

gotyno-hs-1.1.0自述文件

[返回包描述]

戈蒂诺-赫斯

通过类型定义语言为类型生成验证/编码/解码代码的工具。查看语言的详细信息在这里.

安装

确保你有Haskell工具堆栈。用于建筑整个项目,一旦您安装了它,它将管理拥有正确版本的编译器和所有使用的Haskell库。

一旦我们有了堆栈安装后,我们可以在该项目目录中运行以下内容:

烟囱安装

堆栈现在将安装戈蒂诺-赫斯作为二进制文件$HOME/.local/bin目录。如果你做了确保您的$路径你可以执行戈蒂诺-赫斯任何地方。

如果我们想在示例/basic.gotyno将TypeScript和F#合并为单独的输出目录以及监视文件更改并在发生更改时重新编译,我们可以此时执行以下操作:

$gotyno-hs--类型脚本ts-output--fsharp fsharp-output--观察示例/basic.gotyno监视目录:“<ABSOLUTE-PATH-TO-EXAMPLES-directory>”

支持的语言

  • 类型脚本
  • F类#
  • 蟒蛇

计划支持

  • 哈斯克尔
  • PureScript(纯脚本)

将来可能会支持

  • 科特林
  • 斯威夫特
  • Scala 3(如果现在更好)
  • 万能药

可以传递给编译器的选项

编译器的帮助文本说明了您可以执行的大部分操作。

$gotyno-hs-帮助gotyno-将类型定义编译为语言的编码器/解码器用法:gotyno-hs[--ts|--typescript=|-|PATH][--fs|--fsharp=|-| PATH][-w |--监视][-v |--详细]GOTYNOFILE将类型定义编译为语言的编码器/解码器可用选项:--ts,--typescript=|-|PATH设置TypeScript输出--fs,--fsharp=|-|PATH设置fsharp输出--py,--python=|-|PATH设置python输出-w、 --监视监视文件并自动重新编译-v、 --verbose有关编译的输出信息-h、 --help显示此帮助文本

=|-|路径

语言的输出目标可以设置为=用于“与输入文件相同”-用于标准输出或该语言的所有输出的路径。

TypeScript示例

基本哥特诺有一个定义了一些类型的示例基本.ts是自动生成的TypeScript输出这个文件。此目录包含其他示例,主要用于测试目的。

在幕后,它使用的是我为验证而编写的验证库未知的(在大多数情况下,针对给定的接口定义)。

F#示例

基本哥特诺有一个定义了一些类型的示例基本.fs是自动生成的F#输出文件。此目录包含其他示例,主要用于测试目的。

F#版本使用托特用于JSON解码,以及用于我写的一些自定义解码助手。

导入名称(以及通过扩展声明的源名称)将自动转换为使用F#的首字母大写。但是,请注意,PascalCase不会自动转换为。如果导入名称是用snake_case编写的,则输出将是snake_case。大部分是camelCase对于Gotyno文件名将很好地工作,因为对于该特定文件,输出将是“CamelCase”例子。

语言

所有支持的类型名称都是大写的,并且当前也强制使用类型定义。

注释/类型

  • ?类型名表示可选类型。
  • *类型名称表示指向该类型的指针。在对用户隐藏指针的语言中这在为其生成的类型中可能不可见。
  • []类型名称表示一系列类型名长度在运行时已知,而[N] 类型名称表示一系列类型名已知且强制的长度为编译时间。有些语言可能有也可能没有后者的概念,只使用前者用于代码生成。
  • 类型名称<其他类型名称>表示泛型类型的应用程序,例如变量类型名在其定义中填入其他类型名称在这个特定的实例。
  • 相反地,结构/联合类型名称<T>{…}是如何定义采用类型的类型参数。这个<T>此处显示的部分用于获取和提供类型对于相邻范围,因此它在语法中的位置。
  • 类型“SomeValue”表示该值的文本字符串,可以非常有效地使用在TypeScript中。
  • 无符号整数类型相同,但适用于整数。这是否有助于有。

结构体

结构招聘人员{name:字符串}结构人员{name:字符串年龄:U8效率:F32休假:布尔爱好:[]字符串last_fifteen_comments:[15]字符串招聘人员:?招聘人员}结构通用<T>{字段:T其他字段:?带片的其他字段:[]T}

枚举类型

枚举颜色{红色=“FF0000”绿色=“00FF00”蓝色=“0000FF”}

工会

已标记

联合InteractionEvent{单击:坐标按键:按键代码焦点:*元素}活接头选项{一些:T}联合结果<E,T>{错误:E好的:T}

未标记

有时需要一个不带额外标签的联合,尽管通常必须这样通过各自有效载荷中的自定义标签,可以不太自动地识别:

结构SomeType{type:“SomeType”some_field:F32some_other_field:?字符串}结构SomeOtherType{type:“SomeOtherType”活动:布尔some_other_field:?字符串}无标记接头可能{基类型其他类型字符串}

例如,在TypeScript中,此无标记联合的正确类型保护和验证器将是生成,文本字符串字段仍然可以用于标识具有哪种类型。

设置标记键并将其嵌入有效负载结构

也可以通过将标记键设置为嵌入传递给联盟关键字(我们还可以设置使用哪个关键字):

结构SomeType{some_field:F32some_other_field(其他字段):?字符串}结构SomeOtherType{活动:布尔some_other_field:?字符串}联合(tag=type_tag,嵌入式)可能{第一建造师:SomeType第二个构造函数:SomeOtherType}

这将有效地创建一个我们可以获得场地的结构类型标签嵌入有效载荷中构筑物(基类型&其他类型)具有值“第一建造师”“二级建造师”分别。

注意,为了嵌入类型键,我们需要有效载荷(如果存在)为结构类型,否则,我们没有可将类型标记字段合并到其中的字段。

这两项检查引用的有效负载类型是否存在,以及它们是否是结构编译期间完成。

声明

当需要Gotyno文件之外的类型时,我们可以使用声明来断言存在。它的功能很像生成代码中的导入,由用户提供所需文件中每种语言的所需功能:

声明为外部。选项<T>声明otherExternalModule。普通结构HasOption{字段:选项<T>field2:普通}

注意,上面的代码将为每个唯一的源模块生成一个导入(位于“.”的左侧),并且每个用法都会自动识别为对声明的引用。代码输出将依赖于此模块与生成的代码。