Skip to content

Commit 40cc837

Browse files
committed
4.0.0 base -> core and encode -> toBytes
1 parent a705356 commit 40cc837

File tree

7 files changed

+344
-353
lines changed

7 files changed

+344
-353
lines changed

mops.toml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
[package]
22
name = "cbor"
3-
version = "3.0.0"
3+
version = "4.0.0"
44
description = "A CBOR library for encoding and decoding CBOR bytes"
55
repository = "https://github.com/edjcase/motoko_cbor"
6-
keywords = ["cbor", "encoding"]
6+
keywords = [ "cbor", "encoding" ]
77
license = "MIT"
88

99
[dependencies]
10-
base = "0.14.14"
11-
xtended-numbers = "0.4.0"
10+
core = "0.6.0"
11+
xtended-numbers = "2.0.0"
1212

1313
[dev-dependencies]
1414
test = "2.1.1"

src/Decoder.mo

Lines changed: 39 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
import NatX "mo:xtended-numbers/NatX";
22
import FloatX "mo:xtended-numbers/FloatX";
3-
import Blob "mo:base/Blob";
4-
import Buffer "mo:base/Buffer";
5-
import Int "mo:base/Int";
6-
import Int64 "mo:base/Int64";
7-
import Iter "mo:base/Iter";
8-
import Nat "mo:base/Nat";
9-
import Nat64 "mo:base/Nat64";
10-
import Nat8 "mo:base/Nat8";
11-
import Result "mo:base/Result";
12-
import Text "mo:base/Text";
13-
import Util "./Util";
3+
import Blob "mo:core/Blob";
4+
import Int "mo:core/Int";
5+
import Int64 "mo:core/Int64";
6+
import Iter "mo:core/Iter";
7+
import Nat "mo:core/Nat";
8+
import Nat64 "mo:core/Nat64";
9+
import Nat8 "mo:core/Nat8";
10+
import Result "mo:core/Result";
11+
import Text "mo:core/Text";
12+
import List "mo:core/List";
1413
import Types "./Types";
1514

1615
/// CBOR (Concise Binary Object Representation) decoder for Motoko.
@@ -29,7 +28,7 @@ import Types "./Types";
2928
/// Example usage:
3029
/// ```motoko
3130
/// import CBOR "mo:cbor";
32-
/// import Result "mo:base/Result";
31+
/// import Result "mo:core/Result";
3332
///
3433
/// // Decode CBOR bytes to a value
3534
/// let bytes: [Nat8] = [0x18, 0x2a]; // CBOR encoding of integer 42
@@ -64,7 +63,7 @@ module {
6463
/// ```motoko
6564
/// let bytes: [Nat8] = [0xbf, 0x63, 0x46, 0x75, 0x6e, 0xf5, 0x63, 0x41, 0x6d, 0x74, 0x21, 0xff];
6665
/// let cbor: Types.Value = switch(fromBytes(bytes.vals())) {
67-
/// case (#err(e)) Debug.trap("Decoding failed: " # debug_show(e));
66+
/// case (#err(e)) Runtime.trap("Decoding failed: " # debug_show(e));
6867
/// case (#ok(c)) c;
6968
/// };
7069
/// ```
@@ -197,28 +196,28 @@ module {
197196
};
198197
case (#ok(#indef)) {
199198
// Loop indefinitely for each array item
200-
let buffer = Buffer.Buffer<Types.Value>(1);
199+
let buffer = List.empty<Types.Value>();
201200
label l loop {
202201
let cbor_value : Types.Value = switch (decodeInternal(true)) {
203202
case (#err(e)) return #err(e);
204203
case (#ok(#majorType7(#_break))) break l;
205204
case (#ok(v)) v;
206205
};
207-
buffer.add(cbor_value);
206+
List.add(buffer, cbor_value);
208207
};
209-
return #ok(#majorType4(Buffer.toArray(buffer)));
208+
return #ok(#majorType4(List.toArray(buffer)));
210209
};
211210
case (#err(x)) return #err(x);
212211
};
213-
let buffer = Buffer.Buffer<Types.Value>(Nat64.toNat(array_length));
214-
for (i in Iter.range(1, Nat64.toNat(array_length))) {
212+
let buffer = List.empty<Types.Value>();
213+
for (i in Nat.range(1, Nat64.toNat(array_length) + 1)) {
215214
let cbor_value : Types.Value = switch (decodeInternal(false)) {
216215
case (#err(e)) return #err(e);
217216
case (#ok(v)) v;
218217
};
219-
buffer.add(cbor_value);
218+
List.add(buffer, cbor_value);
220219
};
221-
#ok(#majorType4(Buffer.toArray(buffer)));
220+
#ok(#majorType4(List.toArray(buffer)));
222221
};
223222

224223
private func parseMajorType5(additionalBits : Nat8) : Result.Result<Types.Value, Types.DecodingError> {
@@ -232,28 +231,28 @@ module {
232231
};
233232
case (#ok(#indef)) {
234233
// Loop indefinitely for each array item
235-
let buffer = Buffer.Buffer<(Types.Value, Types.Value)>(1);
234+
let buffer = List.empty<(Types.Value, Types.Value)>();
236235
label l loop {
237236
let (key, value) = switch (decodeKeyValuePair()) {
238237
case (#err(#unexpectedBreak)) break l;
239238
case (#err(e)) return #err(e);
240239
case (#ok(v)) v;
241240
};
242-
buffer.add((key, value));
241+
List.add(buffer, (key, value));
243242
};
244-
return #ok(#majorType5(Buffer.toArray(buffer)));
243+
return #ok(#majorType5(List.toArray(buffer)));
245244
};
246245
case (#err(x)) return #err(x);
247246
};
248-
let buffer = Buffer.Buffer<(Types.Value, Types.Value)>(Nat64.toNat(map_size));
249-
for (i in Iter.range(1, Nat64.toNat(map_size))) {
247+
let buffer = List.empty<(Types.Value, Types.Value)>();
248+
for (i in Nat.range(1, Nat64.toNat(map_size) + 1)) {
250249
let (key, value) = switch (decodeKeyValuePair()) {
251250
case (#err(e)) return #err(e);
252251
case (#ok(v)) v;
253252
};
254-
buffer.add((key, value));
253+
List.add(buffer, (key, value));
255254
};
256-
#ok(#majorType5(Buffer.toArray(buffer)));
255+
#ok(#majorType5(List.toArray(buffer)));
257256
};
258257

259258
private func parseMajorType6(additionalBits : Nat8) : Result.Result<Types.Value, Types.DecodingError> {
@@ -315,7 +314,7 @@ module {
315314
let value = switch (readBytes(byteLength)) {
316315
case (null) return #err(#unexpectedEndOfBytes);
317316
case (?v) {
318-
switch (FloatX.decode(Iter.fromArray(v), precision, #msb)) {
317+
switch (FloatX.fromBytes(v.vals(), precision, #msb)) {
319318
case (null) return #err(#invalid("Invalid float value"));
320319
case (?v) v;
321320
};
@@ -339,20 +338,20 @@ module {
339338
if (n < 1) {
340339
return ?[];
341340
};
342-
let iter : Iter.Iter<Nat> = Iter.range(1, n);
343-
let buffer = Buffer.Buffer<Nat8>(n);
341+
let iter : Iter.Iter<Nat> = Nat.range(1, n + 1);
342+
let buffer = List.empty<Nat8>();
344343
for (i in iter) {
345344
let byte = switch (readByte()) {
346345
case (null) return null;
347346
case (?byte) byte;
348347
};
349-
buffer.add(byte);
348+
List.add(buffer, byte);
350349
};
351-
return ?Buffer.toArray(buffer);
350+
return ?List.toArray(buffer);
352351
};
353352

354353
private func readIndefBytes(chunkedMajorType : ?Nat8) : Result.Result<[Nat8], Types.DecodingError> {
355-
let buffer = Buffer.Buffer<Nat8>(1);
354+
let buffer = List.empty<Nat8>();
356355
label l loop {
357356
let byte = switch (readByte()) {
358357
case (null) return #err(#unexpectedEndOfBytes);
@@ -362,7 +361,7 @@ module {
362361
break l; // Reached end of indefinate byte sequence
363362
};
364363
switch (chunkedMajorType) {
365-
case (null) buffer.add(byte); // byte is actual byte value
364+
case (null) List.add(buffer, byte); // byte is actual byte value
366365
case (?t) {
367366
// byte represents major type/additional bits of next byte chunk
368367
let (majorType, additionalBits) = parseMajorType(byte);
@@ -374,11 +373,11 @@ module {
374373
case (null) return #err(#unexpectedEndOfBytes);
375374
case (?v) v;
376375
};
377-
Util.appendArrayToBuffer(buffer, bytes);
376+
List.addAll(buffer, bytes.vals());
378377
};
379378
};
380379
};
381-
return #ok(Buffer.toArray(buffer));
380+
return #ok(List.toArray(buffer));
382381
};
383382

384383
private func decodeKeyValuePair() : Result.Result<(Types.Value, Types.Value), Types.DecodingError> {
@@ -397,10 +396,10 @@ module {
397396
let iter = Iter.fromArray(bytes);
398397
// Convert bytes to value
399398
let result : ?Nat64 = switch (bytes.size()) {
400-
case (1) do ? { NatX.from8To64(NatX.decodeNat8(iter, #msb)!) };
401-
case (2) do ? { NatX.from16To64(NatX.decodeNat16(iter, #msb)!) };
402-
case (4) do ? { NatX.from32To64(NatX.decodeNat32(iter, #msb)!) };
403-
case (8) NatX.decodeNat64(iter, #msb);
399+
case (1) do ? { NatX.from8To64(NatX.fromNat8Bytes(iter, #msb)!) };
400+
case (2) do ? { NatX.from16To64(NatX.fromNat16Bytes(iter, #msb)!) };
401+
case (4) do ? { NatX.from32To64(NatX.fromNat32Bytes(iter, #msb)!) };
402+
case (8) NatX.fromNat64Bytes(iter, #msb);
404403
case (s) return #err(#invalid("Invalid additional bytes size: " # Nat.toText(s)));
405404
};
406405
switch (result) {

0 commit comments

Comments
 (0)