cddl 0.8.26 → 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 +19 -3
- data/cddl.gemspec +9 -7
- data/data/cddl.abnf +29 -13
- data/lib/cbor-pp-play.rb +1 -0
- data/lib/cddl.rb +533 -70
- data/test/test-cddl.rb +2 -2
- 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/cat-re.cddl +2 -0
- data/test-data/catb64.cddl +8 -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/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/hex.cddl +1 -0
- data/test-data/hexlc.cddl +1 -0
- data/test-data/hexuc.cddl +1 -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/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/valemb.cddl +16 -0
- metadata +89 -17
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,10 +7,13 @@ 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]"
|
|
@@ -19,6 +22,13 @@ def usage
|
|
|
19
22
|
exit EX_USAGE
|
|
20
23
|
end
|
|
21
24
|
|
|
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
|
+
|
|
22
32
|
def read_arg(arg, remember_fn = true)
|
|
23
33
|
if arg == "-"
|
|
24
34
|
$fn = "(stdin)" if remember_fn
|
|
@@ -31,7 +41,7 @@ def read_arg(arg, remember_fn = true)
|
|
|
31
41
|
end
|
|
32
42
|
|
|
33
43
|
def parser
|
|
34
|
-
@parser ||= CDDL::Parser.new(read_arg(ARGV[0], false))
|
|
44
|
+
@parser ||= CDDL::Parser.new(utfify(read_arg(ARGV[0], false)))
|
|
35
45
|
end
|
|
36
46
|
|
|
37
47
|
def my_pp(v)
|
|
@@ -96,7 +106,12 @@ begin
|
|
|
96
106
|
instance = if $sequence
|
|
97
107
|
CBOR.decode("\x9f".b << instance.b << "\xff".b)
|
|
98
108
|
else
|
|
99
|
-
|
|
109
|
+
begin
|
|
110
|
+
CBOR.decode(instance.b)
|
|
111
|
+
rescue => e
|
|
112
|
+
warn e.inspect if verbose
|
|
113
|
+
JSON.load(utfify(instance))
|
|
114
|
+
end
|
|
100
115
|
end
|
|
101
116
|
instance = instance.cbor_clone if $annotate && ENV["EXPERIMENTAL_ANNOTATE"]
|
|
102
117
|
warn "#{fn}:" if verbose
|
|
@@ -104,6 +119,7 @@ begin
|
|
|
104
119
|
# my_pp ann
|
|
105
120
|
instance.cbor_add_annotations_from(ann) rescue nil
|
|
106
121
|
my_diag(instance) if $annotate
|
|
122
|
+
warn "ann: #{!!ann}" if verbose
|
|
107
123
|
unless ann
|
|
108
124
|
retcode = 1
|
|
109
125
|
end
|
data/cddl.gemspec
CHANGED
|
@@ -1,23 +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('
|
|
7
|
+
s.add_dependency('abnc', '~> 0.1.1')
|
|
8
|
+
s.add_dependency('json_pure')
|
|
9
9
|
s.add_dependency('abnftt')
|
|
10
|
-
s.add_dependency('regexp-examples') # , '1.1.0')
|
|
10
|
+
s.add_dependency('regexp-examples', '~> 1.5.1') # , '1.1.0')
|
|
11
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')
|
|
12
15
|
s.files = `git ls-files`.split("\n").grep(/^[a-z]/)
|
|
13
16
|
s.files = Dir['lib/**/*.rb'] + %w(cddl.gemspec) + Dir['data/**/*.abnf'] + Dir['data/**/*.cddl'] + Dir['test-data/**/*.cddl'] + Dir['test/**/*.rb']
|
|
14
17
|
s.require_path = 'lib'
|
|
15
18
|
s.executables = ['cddl']
|
|
16
|
-
s.
|
|
17
|
-
s.required_ruby_version = '>= 2.0'
|
|
19
|
+
s.required_ruby_version = '>= 2.3'
|
|
18
20
|
s.author = "Carsten Bormann"
|
|
19
21
|
s.email = "cabo@tzi.org"
|
|
20
|
-
s.homepage = "
|
|
22
|
+
s.homepage = "https://www.rfc-editor.org/rfc/rfc8610#appendix-F"
|
|
21
23
|
s.license = 'MIT'
|
|
22
24
|
end
|
|
23
25
|
|
data/data/cddl.abnf
CHANGED
|
@@ -13,7 +13,8 @@ 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
|
|
19
20
|
/ "~" S typename [genericarg]
|
|
@@ -22,6 +23,8 @@ type1 = type2 [S (rangeop / annotator) S type2]
|
|
|
22
23
|
/ "&" S "(" S group S ")"
|
|
23
24
|
/ "&" S groupname [genericarg]
|
|
24
25
|
|
|
26
|
+
headnumber = uint / ("<" type ">")
|
|
27
|
+
|
|
25
28
|
type2 = value
|
|
26
29
|
/ typename [genericarg]
|
|
27
30
|
/ "(" type ")"
|
|
@@ -38,7 +41,7 @@ grpent = [occur S] [memberkey S] type optcom
|
|
|
38
41
|
/ [occur S] groupname [genericarg] optcom ; preempted by above
|
|
39
42
|
/ [occur S] "(" S group S ")" optcom
|
|
40
43
|
|
|
41
|
-
memberkey = type1 S "=>"
|
|
44
|
+
memberkey = type1 S ["^" S] "=>"
|
|
42
45
|
/ bareword S ":"
|
|
43
46
|
/ value S ":"
|
|
44
47
|
|
|
@@ -62,32 +65,45 @@ value = number
|
|
|
62
65
|
int = ["-"] uint
|
|
63
66
|
|
|
64
67
|
; This is a float if it has fraction or exponent; int otherwise
|
|
65
|
-
number = int ["." fraction] ["e" exponent ]
|
|
68
|
+
number = hexfloat / (int ["." fraction] ["e" exponent ])
|
|
69
|
+
hexfloat = ["-"] "0x" 1*HEXDIG ["." 1*HEXDIG] "p" exponent
|
|
66
70
|
fraction = 1*DIGIT
|
|
67
|
-
exponent =
|
|
71
|
+
exponent = ["+"/"-"] 1*DIGIT
|
|
68
72
|
|
|
69
73
|
text = %x22 *SCHAR %x22
|
|
70
|
-
SCHAR = %x20-21 / %x23-7E / SESC
|
|
71
|
-
|
|
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]]
|
|
72
88
|
|
|
73
89
|
bytes = [bsqual] %x27 *BCHAR %x27
|
|
74
|
-
BCHAR = %x20-26 / %x28-7E / SESC / CRLF
|
|
75
|
-
bsqual =
|
|
76
|
-
/ %x62.36.34 ; "b64"
|
|
90
|
+
BCHAR = %x20-26 / %x28-5B / %x5D-7E / NONASCII / SESC / "\'" / CRLF
|
|
91
|
+
bsqual = "h" / "b64"
|
|
77
92
|
|
|
78
93
|
id = EALPHA *(*("-" / ".") (EALPHA / DIGIT))
|
|
79
94
|
ALPHA = %x41-5A / %x61-7A
|
|
80
|
-
EALPHA =
|
|
95
|
+
EALPHA = ALPHA / "@" / "_" / "$"
|
|
81
96
|
DIGIT = %x30-39
|
|
82
97
|
DIGIT1 = %x31-39
|
|
83
98
|
HEXDIG = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
|
|
99
|
+
HEXDIG1 = DIGIT1 / "A" / "B" / "C" / "D" / "E" / "F"
|
|
84
100
|
BINDIG = %x30-31
|
|
85
101
|
|
|
86
102
|
S = *WS
|
|
87
103
|
WS = SP / NL
|
|
88
104
|
SP = %x20
|
|
89
105
|
NL = COMMENT / CRLF
|
|
90
|
-
COMMENT = ";" *
|
|
91
|
-
|
|
106
|
+
COMMENT = ";" *PCHAR CRLF
|
|
107
|
+
PCHAR = %x20-7E / NONASCII
|
|
108
|
+
NONASCII = %xA0-D7FF / %xE000-10FFFD
|
|
92
109
|
CRLF = %x0A / %x0D.0A
|
|
93
|
-
|
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
|
|