49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
# File 'lib/cbor-diagnostic.rb', line 49
def cbor_diagnostic(options = {})
if lengths = cbor_stream?
pos = 0
"(_ #{lengths.map{|l| r = self[pos, l].cbor_diagnostic(options); pos += l; r}.join(", ")})"
else
if encoding == Encoding::BINARY
if options[:try_decode_embedded] && self != ''
begin
rest = self
result = []
while rest != ''
dv, rest = CBOR.decode_with_rest(rest)
result << dv
end
return "<< #{result.map{|x| x.cbor_diagnostic(options)}.join(", ")} >>"
rescue StandardError => e
end
end
if options[:bytes_as_text] && (u8 = dup.force_encoding(Encoding::UTF_8)).valid_encoding?
"'#{u8.cbor_diagnostic(bytes_as_text: true,
utf8: options[:utf8]
)[1..-2].gsub(/(')|(\\")|(\\.)|([^\\']+)/) {
if $1
"\\'"
elsif $2
"\""
elsif $3
$3
elsif $4
$4
else
fail
end}}'"
else
"h'#{hexbytes}'"
end
else
if options[:utf8]
to_json
else
to_json.encode(Encoding::UTF_16BE).bytes.each_slice(2).map {
|c1, c2| c = (c1 << 8)+c2; c < 128 ? c.chr : '\u%04x' % c }.join
end
end
end
end
|