From d8c0f17c4b7621914e503ead3ac57df2761c3282 Mon Sep 17 00:00:00 2001 From: Alex Li Date: Sat, 28 Dec 2024 20:10:17 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=F0=9F=90=9B=20Use=20an=20explicit=20serial?= =?UTF-8?q?ization=20method=20rather=20than=20`toJson`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/agent_dart_base/lib/candid/idl.dart | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/packages/agent_dart_base/lib/candid/idl.dart b/packages/agent_dart_base/lib/candid/idl.dart index 779ce55e..cfe95054 100644 --- a/packages/agent_dart_base/lib/candid/idl.dart +++ b/packages/agent_dart_base/lib/candid/idl.dart @@ -55,7 +55,12 @@ Uint8List? tryToJson(CType type, dynamic value) { // obj may be a map, must be ignore. value is! Map) { try { - return type.encodeValue(value.toJson()); + try { + value = value.toIDLSerializable(); + } on NoSuchMethodError { + value = value.toJson(); + } + return type.encodeValue(value); } catch (e) { return null; } @@ -904,7 +909,11 @@ class RecordClass extends ConstructType { bool covariant(dynamic x) { if (x is! Map) { try { - x = x.toJson(); + try { + x = x.toIDLSerializable(); + } on NoSuchMethodError { + x = x.toJson(); + } } catch (e) { return false; } From bc80e28d819bd02142223a8b255050ea3406060e Mon Sep 17 00:00:00 2001 From: Alex Li Date: Sat, 28 Dec 2024 20:10:26 +0800 Subject: [PATCH 2/4] =?UTF-8?q?Revert=20"=E2=9A=A1=EF=B8=8F=20Make=20parsa?= =?UTF-8?q?ble=20big=20number=20string=20as=20covariant=20of=20Fixed=20cla?= =?UTF-8?q?sses=20(#88)"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 69cd117a246f1c021394eb11f644a4b3de03f6a1. --- CHANGELOG.md | 4 ---- packages/agent_dart/pubspec.yaml | 2 +- packages/agent_dart_base/lib/candid/idl.dart | 8 -------- packages/agent_dart_base/pubspec.yaml | 2 +- packages/agent_dart_ffi/pubspec.yaml | 2 +- 5 files changed, 3 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a94781d..2475578c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,10 +4,6 @@ that can be found in the LICENSE file. --> # Changelog -## 1.0.0-dev.32 - -- Make parsable big number string as covariant of Fixed classes. - ## 1.0.0-dev.31 - Treat parsable big number string as a covariant of the `Nat` class. diff --git a/packages/agent_dart/pubspec.yaml b/packages/agent_dart/pubspec.yaml index 7058f19e..dddacd9f 100644 --- a/packages/agent_dart/pubspec.yaml +++ b/packages/agent_dart/pubspec.yaml @@ -1,5 +1,5 @@ name: agent_dart -version: 1.0.0-dev.32 +version: 1.0.0-dev.31 description: | An agent library built for Internet Computer, diff --git a/packages/agent_dart_base/lib/candid/idl.dart b/packages/agent_dart_base/lib/candid/idl.dart index cfe95054..31c80a41 100644 --- a/packages/agent_dart_base/lib/candid/idl.dart +++ b/packages/agent_dart_base/lib/candid/idl.dart @@ -641,9 +641,6 @@ class FixedIntClass extends PrimitiveType { } else if (x is int) { final v = BigInt.from(x); return v >= min && v <= max; - } else if (x is String && BigInt.tryParse(x) != null) { - final v = BigInt.parse(x); - return v >= min && v <= max; } else { return false; } @@ -704,11 +701,6 @@ class FixedNatClass extends PrimitiveType { } else if (x is int && x >= 0) { final v = BigInt.from(x); return v < max; - } else if (x is String && - BigInt.tryParse(x) != null && - BigInt.parse(x) >= BigInt.zero) { - final v = BigInt.parse(x); - return v < max; } else { return false; } diff --git a/packages/agent_dart_base/pubspec.yaml b/packages/agent_dart_base/pubspec.yaml index 7efc1494..4bc385d8 100644 --- a/packages/agent_dart_base/pubspec.yaml +++ b/packages/agent_dart_base/pubspec.yaml @@ -1,5 +1,5 @@ name: agent_dart_base -version: 1.0.0-dev.32 +version: 1.0.0-dev.31 description: The Dart plugin that bridges Rust implementation for agent_dart. repository: https://github.com/AstroxNetwork/agent_dart diff --git a/packages/agent_dart_ffi/pubspec.yaml b/packages/agent_dart_ffi/pubspec.yaml index 5401f0af..cc7c35fb 100644 --- a/packages/agent_dart_ffi/pubspec.yaml +++ b/packages/agent_dart_ffi/pubspec.yaml @@ -1,5 +1,5 @@ name: agent_dart_ffi -version: 1.0.0-dev.32 +version: 1.0.0-dev.31 description: The FFI plugin that bridges Rust implementation for agent_dart. repository: https://github.com/AstroxNetwork/agent_dart From 1d9faf605f7c2b219068c69f75e98f95dc858e2d Mon Sep 17 00:00:00 2001 From: Alex Li Date: Sat, 28 Dec 2024 20:11:45 +0800 Subject: [PATCH 3/4] Revert part of `Nat` encode improvement (#87) --- .../agent_dart_base/lib/agent/utils/leb128.dart | 17 ++++------------- packages/agent_dart_base/lib/candid/idl.dart | 4 +--- .../test/agent/utils/leb128.dart | 2 -- 3 files changed, 5 insertions(+), 18 deletions(-) diff --git a/packages/agent_dart_base/lib/agent/utils/leb128.dart b/packages/agent_dart_base/lib/agent/utils/leb128.dart index b0183146..5f86dc85 100644 --- a/packages/agent_dart_base/lib/agent/utils/leb128.dart +++ b/packages/agent_dart_base/lib/agent/utils/leb128.dart @@ -22,12 +22,7 @@ List safeRead(BufferPipe pipe, int ref) { /// nearest integer. /// @param value The number to encode. Uint8List lebEncode(dynamic value) { - BigInt bn = switch (value) { - BigInt() => value, - num() => BigInt.from(value), - String() => BigInt.parse(value), - _ => throw ArgumentError('Invalid big number: $value', 'lebEncode'), - }; + BigInt bn = value is BigInt ? value : BigInt.from(value); if (bn < BigInt.zero) { throw StateError('Cannot leb-encode negative values.'); } @@ -63,13 +58,9 @@ BigInt lebDecode(BufferPipe pipe) { /// Encode a number (or bigint) into a Buffer, with support for negative numbers. /// The number will be floored to the nearest integer. /// @param value The number to encode. -Uint8List slebEncode(dynamic value) { - BigInt bn = switch (value) { - BigInt() => value, - num() => BigInt.from(value), - String() => BigInt.parse(value), - _ => throw ArgumentError('Invalid big number: $value', 'slebEncode'), - }; +Uint8List slebEncode(Comparable value) { + BigInt bn = value is BigInt ? value : BigInt.from(value as num); + final isNeg = bn < BigInt.zero; if (isNeg) { bn = -bn - BigInt.one; diff --git a/packages/agent_dart_base/lib/candid/idl.dart b/packages/agent_dart_base/lib/candid/idl.dart index 31c80a41..5238ee20 100644 --- a/packages/agent_dart_base/lib/candid/idl.dart +++ b/packages/agent_dart_base/lib/candid/idl.dart @@ -533,9 +533,7 @@ class NatClass extends PrimitiveType { @override bool covariant(x) { - return (x is BigInt && x >= BigInt.zero) || - (x is int && x >= 0) || - (x is String && BigInt.parse(x) >= BigInt.zero); + return (x is BigInt && x >= BigInt.zero) || (x is int && x >= 0); } @override diff --git a/packages/agent_dart_base/test/agent/utils/leb128.dart b/packages/agent_dart_base/test/agent/utils/leb128.dart index 831e949a..072a97aa 100644 --- a/packages/agent_dart_base/test/agent/utils/leb128.dart +++ b/packages/agent_dart_base/test/agent/utils/leb128.dart @@ -24,7 +24,6 @@ void leb128Test() { lebEncode(BigInt.from(60000000000000000)).toHex(), '808098f4e9b5ca6a', ); - expect(lebEncode('1').toHex(), '01'); expect(lebDecode(BufferPipe(Uint8List.fromList([0]))), BigInt.zero); expect(lebDecode(BufferPipe(Uint8List.fromList([1]))), BigInt.one); @@ -60,7 +59,6 @@ void leb128Test() { slebEncode(BigInt.parse('60000000000000000')).toHex(), '808098f4e9b5caea00', ); - expect(slebEncode('1').toHex(), '01'); expect( slebDecode(BufferPipe(Uint8List.fromList([0x7f]))), From a62cc83aae50bfa1f6534d2c23395fa071be8db9 Mon Sep 17 00:00:00 2001 From: Alex Li Date: Sat, 28 Dec 2024 20:20:57 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=F0=9F=94=96=201.0.0-dev.33?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 10 ++++++++++ packages/agent_dart/pubspec.yaml | 2 +- packages/agent_dart_base/pubspec.yaml | 2 +- packages/agent_dart_ffi/pubspec.yaml | 2 +- 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2475578c..83001afc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,16 @@ that can be found in the LICENSE file. --> # Changelog +## 1.0.0-dev.33 + +- Use an explicit serialization method rather than `toJson`. +- Revert #88. +- Revert part of #87. + +## 1.0.0-dev.32 + +- Make parsable big number string as covariant of Fixed classes. + ## 1.0.0-dev.31 - Treat parsable big number string as a covariant of the `Nat` class. diff --git a/packages/agent_dart/pubspec.yaml b/packages/agent_dart/pubspec.yaml index dddacd9f..6c7ff0f7 100644 --- a/packages/agent_dart/pubspec.yaml +++ b/packages/agent_dart/pubspec.yaml @@ -1,5 +1,5 @@ name: agent_dart -version: 1.0.0-dev.31 +version: 1.0.0-dev.33 description: | An agent library built for Internet Computer, diff --git a/packages/agent_dart_base/pubspec.yaml b/packages/agent_dart_base/pubspec.yaml index 4bc385d8..fc11eaca 100644 --- a/packages/agent_dart_base/pubspec.yaml +++ b/packages/agent_dart_base/pubspec.yaml @@ -1,5 +1,5 @@ name: agent_dart_base -version: 1.0.0-dev.31 +version: 1.0.0-dev.33 description: The Dart plugin that bridges Rust implementation for agent_dart. repository: https://github.com/AstroxNetwork/agent_dart diff --git a/packages/agent_dart_ffi/pubspec.yaml b/packages/agent_dart_ffi/pubspec.yaml index cc7c35fb..af9f0b01 100644 --- a/packages/agent_dart_ffi/pubspec.yaml +++ b/packages/agent_dart_ffi/pubspec.yaml @@ -1,5 +1,5 @@ name: agent_dart_ffi -version: 1.0.0-dev.31 +version: 1.0.0-dev.33 description: The FFI plugin that bridges Rust implementation for agent_dart. repository: https://github.com/AstroxNetwork/agent_dart