#json-schema #dsl #swagger #cli #generate-json

app chema

JSON Schema 的外部 DSL

9 个版本

0.0.9 2020年12月2日
0.0.8 2020年11月4日
0.0.7 2018年12月6日
0.0.6 2018年9月19日
0.0.4 2017年11月22日

#887 in 开发工具

32 每月下载量

Apache-2.0/MIT

51KB
1.5K SLoC

Build Status Build status

chema at crates.io

Chema

从轻量级 DSL 生成 JSON Schema。

最初目的是生成 swagger 规范的 definitions 部分

安装

https://github.com/KeenS/chema/releases 下载二进制文件或如果您已设置 cargo,使用以下命令安装

$ cargo install chema

用法

chema 0.0.8
Sunrin SHIMURA (keen) <3han5chou7@gmail.com>
An external DSL for JSON Schema
USAGE:
    chema [FLAGS] [OPTIONS] <input>
FLAGS:
    -h, --help          Prints help information
        --no-swagger    don't use swagger spesific notation
        --pack          if pack the output
    -V, --version       Prints version information
OPTIONS:
        --format <format>              output format (json|yaml) [default: json]
        --path-prefix <path_prefix>    path prefix of paths [default: /definitions]
ARGS:
    <input>    input file

语法

TOP = ITEMS
ITEMS = ITEM+
ITEM = TYPEDEF

TYPEDEF = "type" IDENT "=" TYPE ";"

TYPE = "null" | "boolean" | "object" | "number" | "string" | "integer"
     | IDENT | "[" TYPE "]" | STRUCT | ENUM | TYPE "?"
     | "format" "(" STRING ")" | "url" "(" STRING ")"
     | TYPE "&" TYPE |  TYPE "|" TYPE
     | TYPE "where" PRED
     | "(" TYPE ")" | STRING

STRUCT = "struct" "{" (FIELD ",")+ "}"
FIELD = IDENT "?"? ":" TYPE

ENUM = "enum" "{" (VARIANT",")+ "}"
VARIANT = STRING

PRED = UNUMBER "<=" "length" | "length" <= UNUMBER
     | "format" "=" STRING | "it" "=~" REGEX
     | PRED && PRED

IDENT = [a-zA-Z_][a-zA-Z0-9_]*
STRIING = "\"" ([^"\\]|\\.)* "\""
REGEX   = "/" ([^/\\]|\\.)* "/"
UNUMBER = [0-9]+

COMMENT = "//" any "\n" | "/*" any "*/"
DOC_COMMENT = "/**" any "*/"

示例

参见 etc. *.jsd 是源文件,而 *.jsons 是生成的文件。

支持的平台

将支持类似 UNIX 的系统。Ubuntu LTS 是主要目标。Windows 的支持是尽力而为的,可能无法正常工作。

依赖项

~8–17MB
~223K SLoC