cddl 0.8.9 → 0.12.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/cddl +51 -15
- data/cddl.gemspec +10 -7
- data/data/cddl.abnf +30 -13
- data/lib/cbor-pp-play.rb +1 -0
- data/lib/cddl.rb +719 -71
- data/test/test-cddl.rb +53 -2
- data/test-data/7807.cddl +14 -0
- data/test-data/abignum.cddl +1 -0
- data/test-data/abnf1.cddl +3 -0
- data/test-data/abnf2.cddl +37 -0
- data/test-data/abnf3.cddl +32 -0
- data/test-data/b64c-sloppy.cddl +1 -0
- data/test-data/b64c.cddl +1 -0
- data/test-data/b64u-strict.cddl +12 -0
- data/test-data/b64u.cddl +1 -0
- data/test-data/base32.cddl +1 -0
- data/test-data/base32hex.cddl +1 -0
- data/test-data/bat.cddl +16 -0
- data/test-data/cat-re.cddl +4 -0
- data/test-data/catb64.cddl +8 -0
- data/test-data/complex-occ.cddl +11 -0
- data/test-data/coral.cddl +10 -0
- data/test-data/coral1.cddl +5 -0
- data/test-data/coral2.cddl +7 -0
- data/test-data/coral3.cddl +7 -0
- data/test-data/decimal-warn.cddl +1 -0
- data/test-data/decimal.cddl +1 -0
- data/test-data/decimal2.cddl +1 -0
- data/test-data/det1.cddl +12 -0
- data/test-data/dotplus1.cddl +3 -0
- data/test-data/dotplus2.cddl +3 -0
- data/test-data/dotplus3.cddl +3 -0
- data/test-data/dotplus4.cddl +3 -0
- data/test-data/enum.cddl +14 -0
- data/test-data/enum1.cddl +12 -0
- data/test-data/feat1.cddl +4 -0
- data/test-data/feature-controller.cddl +6 -0
- data/test-data/feature-detail.cddl +5 -0
- data/test-data/hex.cddl +1 -0
- data/test-data/hexlc.cddl +1 -0
- data/test-data/hexuc.cddl +1 -0
- data/test-data/homenet-de.cddl +12 -0
- data/test-data/homenet-fe.cddl +12 -0
- data/test-data/jim-cut-2.cddl +11 -0
- data/test-data/jim-cut.cddl +12 -0
- data/test-data/join.cddl +1 -0
- data/test-data/joini.cddl +1 -0
- data/test-data/joinx.cddl +1 -0
- data/test-data/json.cddl +1 -0
- data/test-data/json1.cddl +15 -0
- data/test-data/json2.cddl +1 -0
- data/test-data/jwt.cddl +15 -0
- data/test-data/lint1.cddl +9 -0
- data/test-data/mdl-ble.cddl +9 -0
- data/test-data/mdl-deve.cddl +54 -0
- data/test-data/mdl-dp.cddl +11 -0
- data/test-data/mdl-mso.cddl +20 -0
- data/test-data/mdl-request.cddl +26 -0
- data/test-data/mdl-response.cddl +66 -0
- data/test-data/mdl.cddl +11 -0
- data/test-data/mon-val.cddl +1 -0
- data/test-data/multipart-ct.cddl +2 -0
- data/test-data/non-empty.cddl +5 -0
- data/test-data/oid.cddl +8 -0
- data/test-data/oidbat.cddl +8 -0
- data/test-data/plus.cddl +3 -0
- data/test-data/prim.cddl +7 -0
- data/test-data/printf.cddl +2 -0
- data/test-data/printf0.cddl +1 -0
- data/test-data/printf1.cddl +2 -0
- data/test-data/printf2.cddl +2 -0
- data/test-data/printf3.cddl +2 -0
- data/test-data/sasl.cddl +24 -0
- data/test-data/sequence.cddl +1 -0
- data/test-data/sipos.cddl +8 -0
- data/test-data/star-edited.cddl +98 -0
- data/test-data/star.cddl +95 -0
- data/test-data/test-gen.cddl +3 -0
- data/test-data/time.cddl +11 -0
- data/test-data/valemb.cddl +16 -0
- data/test-data/yangid.cddl +1 -0
- data/test-data/yaron1.cddl +95 -0
- metadata +142 -13
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a4b5bfb31fd9b7fcf4cf66a1d0f2a76550c9682215c486d99a03997bab1ae30b
|
|
4
|
+
data.tar.gz: 97f11378fb18576f115ffb8cbd668fe9e14e33e91e4aac01d874c69e206f2fbd
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 623f3945c3fff7c04dd2a4e1c77879d585d347092c87b54d5ead6b8fb3ed3c5ab68a58ae67b7f3f936437c8bc9f92dea6f8597509ba8913fbc5e2e47f43d398a
|
|
7
|
+
data.tar.gz: a04d3f282b0d42182f63dd66988fece8fb0ab7ddb4e159b2f8213705503cff0a97b622a172096b881dc4fe70f16bdcc48a51fa035413bc55421bb5e15d1bcda3
|
data/bin/cddl
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#!/usr/bin/env ruby
|
|
1
|
+
#!/usr/bin/env RUBY_THREAD_VM_STACK_SIZE=5000000 ruby
|
|
2
2
|
# -*- coding: utf-8 -*-
|
|
3
3
|
# require_relative '../lib/cddl'
|
|
4
4
|
require 'cddl'
|
|
@@ -7,29 +7,41 @@ require 'json'
|
|
|
7
7
|
|
|
8
8
|
Encoding.default_external = "UTF-8" # wake up, smell the coffee
|
|
9
9
|
|
|
10
|
+
CDDL_VERSION = Gem.loaded_specs["cddl"].version rescue "unknown-version"
|
|
11
|
+
|
|
10
12
|
EX_USAGE = 64
|
|
11
13
|
EX_DATAERR = 65
|
|
12
14
|
|
|
13
15
|
def usage
|
|
16
|
+
warn "cddl tool version #{CDDL_VERSION}"
|
|
14
17
|
warn "Usage:"
|
|
15
18
|
warn "#$0 spec.cddl generate [n]"
|
|
16
19
|
warn "#$0 spec.cddl json-generate [n]"
|
|
17
|
-
warn "#$0 spec.cddl validate instance.cbor"
|
|
18
|
-
warn "#$0 spec.cddl validate instance.json"
|
|
20
|
+
warn "#$0 spec.cddl validate instance.cbor..."
|
|
21
|
+
warn "#$0 spec.cddl validate instance.json..."
|
|
19
22
|
exit EX_USAGE
|
|
20
23
|
end
|
|
21
24
|
|
|
22
|
-
def
|
|
25
|
+
def utfify(s)
|
|
26
|
+
s.force_encoding(Encoding::UTF_8).scrub { |c|
|
|
27
|
+
warn "*** replaced invalid UTF-8 byte sequence #{c.inspect} by U+FFFD REPLACEMENT CHARACTER"
|
|
28
|
+
0xFFFD.chr(Encoding::UTF_8)
|
|
29
|
+
}
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def read_arg(arg, remember_fn = true)
|
|
23
33
|
if arg == "-"
|
|
34
|
+
$fn = "(stdin)" if remember_fn
|
|
24
35
|
STDIN.read
|
|
25
36
|
else
|
|
26
37
|
usage unless arg
|
|
38
|
+
$fn = arg if remember_fn
|
|
27
39
|
File.read(arg, mode: "rb")
|
|
28
40
|
end
|
|
29
41
|
end
|
|
30
42
|
|
|
31
43
|
def parser
|
|
32
|
-
@parser ||= CDDL::Parser.new(read_arg(ARGV[0]))
|
|
44
|
+
@parser ||= CDDL::Parser.new(utfify(read_arg(ARGV[0], false)))
|
|
33
45
|
end
|
|
34
46
|
|
|
35
47
|
def my_pp(v)
|
|
@@ -48,13 +60,19 @@ def my_diag(v)
|
|
|
48
60
|
end
|
|
49
61
|
end
|
|
50
62
|
|
|
63
|
+
retcode = 0
|
|
64
|
+
|
|
51
65
|
begin
|
|
52
66
|
case ARGV[1]
|
|
53
|
-
when /\A
|
|
67
|
+
when /\A..*p/
|
|
54
68
|
$annotate = true
|
|
55
69
|
require_relative '../lib/cbor-pp'
|
|
56
70
|
end
|
|
57
71
|
case ARGV[1]
|
|
72
|
+
when /\A..*s/
|
|
73
|
+
$sequence = true
|
|
74
|
+
end
|
|
75
|
+
case ARGV[1]
|
|
58
76
|
when /\Ar/ # secret
|
|
59
77
|
$advanced = true
|
|
60
78
|
my_pp parser.rules
|
|
@@ -81,15 +99,31 @@ begin
|
|
|
81
99
|
g = parser.generate
|
|
82
100
|
puts JSON.pretty_generate(g)
|
|
83
101
|
end
|
|
84
|
-
when /\Av
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
102
|
+
when /\Av(v)?/
|
|
103
|
+
verbose = $1
|
|
104
|
+
ARGV[2..-1].each do |fn|
|
|
105
|
+
instance = read_arg(fn)
|
|
106
|
+
instance = if $sequence
|
|
107
|
+
CBOR.decode("\x9f".b << instance.b << "\xff".b)
|
|
108
|
+
else
|
|
109
|
+
begin
|
|
110
|
+
CBOR.decode(instance.b)
|
|
111
|
+
rescue => e
|
|
112
|
+
warn e.inspect if verbose
|
|
113
|
+
JSON.load(utfify(instance))
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
instance = instance.cbor_clone if $annotate && ENV["EXPERIMENTAL_ANNOTATE"]
|
|
117
|
+
warn "#{fn}:" if verbose
|
|
118
|
+
ann = parser.validate(instance)
|
|
119
|
+
# my_pp ann
|
|
120
|
+
instance.cbor_add_annotations_from(ann) rescue nil
|
|
121
|
+
my_diag(instance) if $annotate
|
|
122
|
+
warn "ann: #{!!ann}" if verbose
|
|
123
|
+
unless ann
|
|
124
|
+
retcode = 1
|
|
125
|
+
end
|
|
126
|
+
end
|
|
93
127
|
else
|
|
94
128
|
usage
|
|
95
129
|
end
|
|
@@ -97,3 +131,5 @@ rescue CDDL::ParseError => e
|
|
|
97
131
|
warn e.message
|
|
98
132
|
exit EX_DATAERR
|
|
99
133
|
end
|
|
134
|
+
|
|
135
|
+
exit retcode
|
data/cddl.gemspec
CHANGED
|
@@ -1,22 +1,25 @@
|
|
|
1
1
|
spec = Gem::Specification.new do |s|
|
|
2
2
|
s.name = 'cddl'
|
|
3
|
-
s.version = '0.
|
|
3
|
+
s.version = '0.12.14'
|
|
4
4
|
s.summary = "CDDL generator and validator."
|
|
5
5
|
s.description = %{A parser, generator, and validator for CDDL}
|
|
6
6
|
s.add_dependency('cbor-diag')
|
|
7
|
-
s.add_dependency('abnc')
|
|
8
|
-
s.add_dependency('
|
|
9
|
-
s.add_dependency('
|
|
7
|
+
s.add_dependency('abnc', '~> 0.1.1')
|
|
8
|
+
s.add_dependency('json_pure')
|
|
9
|
+
s.add_dependency('abnftt')
|
|
10
|
+
s.add_dependency('regexp-examples', '~> 1.5.1') # , '1.1.0')
|
|
10
11
|
s.add_dependency('colorize')
|
|
12
|
+
s.add_dependency('base32', '~> 0.3')
|
|
13
|
+
s.add_dependency('base45_lite', '~> 1.0')
|
|
14
|
+
s.add_dependency('scanf', '~> 1.0')
|
|
11
15
|
s.files = `git ls-files`.split("\n").grep(/^[a-z]/)
|
|
12
16
|
s.files = Dir['lib/**/*.rb'] + %w(cddl.gemspec) + Dir['data/**/*.abnf'] + Dir['data/**/*.cddl'] + Dir['test-data/**/*.cddl'] + Dir['test/**/*.rb']
|
|
13
17
|
s.require_path = 'lib'
|
|
14
18
|
s.executables = ['cddl']
|
|
15
|
-
s.
|
|
16
|
-
s.required_ruby_version = '>= 2.0'
|
|
19
|
+
s.required_ruby_version = '>= 2.3'
|
|
17
20
|
s.author = "Carsten Bormann"
|
|
18
21
|
s.email = "cabo@tzi.org"
|
|
19
|
-
s.homepage = "
|
|
22
|
+
s.homepage = "https://www.rfc-editor.org/rfc/rfc8610#appendix-F"
|
|
20
23
|
s.license = 'MIT'
|
|
21
24
|
end
|
|
22
25
|
|
data/data/cddl.abnf
CHANGED
|
@@ -13,14 +13,18 @@ genericarg = "<" S type1 S *("," S type1 S ) ">"
|
|
|
13
13
|
type = type1 S *("/" S type1 S)
|
|
14
14
|
|
|
15
15
|
type1 = type2 [S (rangeop / annotator) S type2]
|
|
16
|
-
/ "#" "6" ["."
|
|
16
|
+
/ "#" "6" ["." headnumber] "(" S type S ")" ; note no space!
|
|
17
|
+
/ "#" "7" ["." headnumber] ; note no space!
|
|
17
18
|
/ "#" DIGIT ["." uint] ; major/ai
|
|
18
19
|
/ "#" ; any
|
|
20
|
+
/ "~" S typename [genericarg]
|
|
19
21
|
/ "{" S group S "}"
|
|
20
22
|
/ "[" S group S "]"
|
|
21
23
|
/ "&" S "(" S group S ")"
|
|
22
24
|
/ "&" S groupname [genericarg]
|
|
23
25
|
|
|
26
|
+
headnumber = uint / ("<" type ">")
|
|
27
|
+
|
|
24
28
|
type2 = value
|
|
25
29
|
/ typename [genericarg]
|
|
26
30
|
/ "(" type ")"
|
|
@@ -37,7 +41,7 @@ grpent = [occur S] [memberkey S] type optcom
|
|
|
37
41
|
/ [occur S] groupname [genericarg] optcom ; preempted by above
|
|
38
42
|
/ [occur S] "(" S group S ")" optcom
|
|
39
43
|
|
|
40
|
-
memberkey = type1 S "=>"
|
|
44
|
+
memberkey = type1 S ["^" S] "=>"
|
|
41
45
|
/ bareword S ":"
|
|
42
46
|
/ value S ":"
|
|
43
47
|
|
|
@@ -61,32 +65,45 @@ value = number
|
|
|
61
65
|
int = ["-"] uint
|
|
62
66
|
|
|
63
67
|
; This is a float if it has fraction or exponent; int otherwise
|
|
64
|
-
number = int ["." fraction] ["e" exponent ]
|
|
68
|
+
number = hexfloat / (int ["." fraction] ["e" exponent ])
|
|
69
|
+
hexfloat = ["-"] "0x" 1*HEXDIG ["." 1*HEXDIG] "p" exponent
|
|
65
70
|
fraction = 1*DIGIT
|
|
66
|
-
exponent =
|
|
71
|
+
exponent = ["+"/"-"] 1*DIGIT
|
|
67
72
|
|
|
68
73
|
text = %x22 *SCHAR %x22
|
|
69
|
-
SCHAR = %x20-21 / %x23-7E / SESC
|
|
70
|
-
|
|
74
|
+
SCHAR = %x20-21 / %x23-5B / %x5D-7E / NONASCII / SESC
|
|
75
|
+
|
|
76
|
+
SESC = "\" ( %x22 / "/" / "\" / ; \" \/ \\
|
|
77
|
+
%x62 / %x66 / %x6E / %x72 / %x74 / ; \b \f \n \r \t
|
|
78
|
+
(%x75 hexchar) ) ; \uXXXX
|
|
79
|
+
|
|
80
|
+
hexchar = "{" (1*"0" [ hexscalar ] / hexscalar) "}" /
|
|
81
|
+
non-surrogate / (high-surrogate "\" %x75 low-surrogate)
|
|
82
|
+
non-surrogate = ((DIGIT / "A"/"B"/"C" / "E"/"F") HEXDIG HEXDIG HEXDIG) /
|
|
83
|
+
("D" %x30-37 HEXDIG HEXDIG)
|
|
84
|
+
high-surrogate = "D" ("8"/"9"/"A"/"B") HEXDIG HEXDIG
|
|
85
|
+
low-surrogate = "D" ("C"/"D"/"E"/"F") HEXDIG HEXDIG
|
|
86
|
+
hexscalar = "10" HEXDIG HEXDIG HEXDIG HEXDIG / HEXDIG1 HEXDIG HEXDIG HEXDIG HEXDIG
|
|
87
|
+
/ non-surrogate / HEXDIG [HEXDIG [HEXDIG]]
|
|
71
88
|
|
|
72
89
|
bytes = [bsqual] %x27 *BCHAR %x27
|
|
73
|
-
BCHAR = %x20-26 / %x28-7E / SESC / CRLF
|
|
74
|
-
bsqual =
|
|
75
|
-
/ %x62.36.34 ; "b64"
|
|
90
|
+
BCHAR = %x20-26 / %x28-5B / %x5D-7E / NONASCII / SESC / "\'" / CRLF
|
|
91
|
+
bsqual = "h" / "b64"
|
|
76
92
|
|
|
77
93
|
id = EALPHA *(*("-" / ".") (EALPHA / DIGIT))
|
|
78
94
|
ALPHA = %x41-5A / %x61-7A
|
|
79
|
-
EALPHA =
|
|
95
|
+
EALPHA = ALPHA / "@" / "_" / "$"
|
|
80
96
|
DIGIT = %x30-39
|
|
81
97
|
DIGIT1 = %x31-39
|
|
82
98
|
HEXDIG = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
|
|
99
|
+
HEXDIG1 = DIGIT1 / "A" / "B" / "C" / "D" / "E" / "F"
|
|
83
100
|
BINDIG = %x30-31
|
|
84
101
|
|
|
85
102
|
S = *WS
|
|
86
103
|
WS = SP / NL
|
|
87
104
|
SP = %x20
|
|
88
105
|
NL = COMMENT / CRLF
|
|
89
|
-
COMMENT = ";" *
|
|
90
|
-
|
|
106
|
+
COMMENT = ";" *PCHAR CRLF
|
|
107
|
+
PCHAR = %x20-7E / NONASCII
|
|
108
|
+
NONASCII = %xA0-D7FF / %xE000-10FFFD
|
|
91
109
|
CRLF = %x0A / %x0D.0A
|
|
92
|
-
|
data/lib/cbor-pp-play.rb
CHANGED
|
@@ -2,6 +2,7 @@ require_relative "cbor-pp"
|
|
|
2
2
|
|
|
3
3
|
a = [1, {foo: "bar", busel: "basel", baz: "bass", ant: "cat", bat: "dog", eel: "fox"},
|
|
4
4
|
2, 3, 4, [3]*55, "foo".b, 0.00006103515625, 0.0000099, 1e-7, nil]
|
|
5
|
+
a[0].cbor_annotation_add "flurp"
|
|
5
6
|
a[1].cbor_annotation_add "fasel"
|
|
6
7
|
CBOR::PP.pp a
|
|
7
8
|
|