- Deserializer only checks subtyping for reference types, fully conforming to Candid spec 1.4. You can now decode
opt variant
even if the variant tags are not the same, allowing upgrading variant types without breaking the client code. - The old
candid::Type
is nowcandid::TypeInner
, andType
is a newtype ofRc<TypeInner>
. This change significantly improves deserialization performance (25% -- 50% improvements) candid::parser
module is only available under feature flag"parser"
. This significantly cut down compilation time and Wasm binary size- Disable the use of
candid::Func
andcandid::Service
to avoid footguns. Usedefine_function!
anddefine_service!
macro instead candid::parser::typing::TypeEnv
moved tocandid::types::TypeEnv
. Use ofcandid::TypeEnv
is not affectedcandid::parser::types::FuncMode
moved tocandid::types::FuncMode
candid::parser::value
moved tocandid::types::value
candid::parser::pretty
moved tocandid::bindings::candid::value
- Deprecate
ToDoc
trait for pretty printingIDLProg
, usecandid::bindings::candid
module instead - Deprecate
candid::codegen
, usecandid::bindings
instead - In
candid::bindings::rust
, there is aConfig
struct to control how Rust bindings are generated
- Macros for constructing type AST nodes:
service!
,func!
andfield!
- Support future types
- Bound recursion depth in deserialization for non-Wasm target (Wasm canister doesn't have a specified C ABI, and runs in a sandbox. It's okay to stack overflow)
Nat
serialization for JSON and CBOR
- Bug fix in TS bindings
- Pretty print numbers
- Downgrade
serde_dhall
for license issue.
- Fix: missing impl serde traits for
Principal
- Move
Principal
into this crate, no more re-exportic-types
- Bump
ic-types
to0.5
(fixinglookup_path
for hash trees)
- Implement
CandidType
forRc
andArc
- Fix TS binding for TypedArray
- Fix float tokenizer
- Derive
Serialize
forInt
andNat
- Fix parser: underscore for hexnum; semicolon at the EOF
- Fix semicolon in Rust binding
- Derive
Copy
,Eq
,Default
forReserved
- Bump
ic-types
to0.4
- Fetch did file from canister metadata
- Deprecate
localhost/_/candid
endpoint - Fetch name section from metadata (instrumented code)
- Bug fix for encoding
vec nat8
types - Disable profiler for query methods
- Update service methods in TS bindings to use ActorMethod, the type used by agent-js's Actor class
- Infer the type of
vec {}
tovec empty
to satisfy subtype checking - Expose more internal structures
- Bump ic-types to 0.3
candid::utils::service_compatible
to check for upgrade compatibility of two service types
- Generate Rust binding from Candid file (experimental)
- Ignore init args for subtype checking
- Pretty print text value with escape_debug
- More visitors for Nat and Int type
- Flamegraph when profiling feature is enabled
- Fix
subtype
function to take only one env. To check subtyping from two did files, useenv.merge_type(env2, ty2)
to merge the env and rename variable names.
- Release ARM binary for
didc
- Refine the spec for opt rules
- Support import when parsing did files with
check_file
function - Fix TypeScript binding for reference types
- Report profiling info when
__get_cycles
method is available - Add binding generation and subtype checking for Candid UI canister
- Update TypeScript binding to better integrate with dfx
- Set
is_human_readable
to false in Deserializer
- Update JS binding to use
Principal
from@dfinity/principal
- Add
#[candid_path("path_to_candid")]
helper attribute to the candid derive macro - Update
ic-types
to 0.2.0
- Update spec to introduce subtyping check in deserialization #168
- Coq proof for subtype check
- Update test suite to conform with the new spec
- Require full subtype checking in deserialization. This removes undefined behavior when trying to decode variant and empty vector at types that are not supertype of the wire type.
- Deserialization requires both
Deserialize
andCandidType
trait. de::ArgumentDecoder
,ser::ArgumentEncoder
moved toutils::{ArgumentDecoder, ArgumentEncoder}
.types::subtype
returnsResult<()>
instead ofbool
for better error message.- Disable subtyping conversion for opt rules in
IDLValue.annotate_type
. - Display type annotations for number types.
- Better error messages in deserialization
- Remove unnessary
reqwest
dependency - Implement CandidType for
str
didc bind
to support Motoko bindingsdidc hash
to compute hash of a field namedidc decode
can decode blob format- Candid UI canister
- Fix a bug for serializing recursive values in Rust CDK #210
- Use BigInt in JS/TS binding
- Fix TypeScript binding for tuple
- Rust support for Func and Service value
#[candid_method(init)]
to support init arguments in service actor- Subtyping check for Candid types
- Handle subtyping for
reserved
andint
in decoding
- Benchmark for Rust library with criterion
didc check
anddidc subtype
command to check for subtyping- Conditional running CI for Coq or Rust library
- Support
serde_bytes
for efficient handling of&[u8]
andVec<u8>
- Typescript binding for Candid
- Support more native Rust types: Path, PathBuf, VecDeque, LinkedList, BinaryHeap, Cow, Cell, RefCell
- Documentation for type mapping and howto section
didc bind
to generate typescript binding
- Generate random Candid values
- Sort method names lexicographically
- Candid user guide
- More Coq proof for MiniCandid
didc random
command and an experimental config file
- Better pretty printer for Candid value
- Support reference types
- Support more native Rust types: HashMap, HashSet, BTreeMap, BTreeSet, i128, u128
- Bug fix for empty record detection when deserializing to native Rust types
- Test suites for reference types
didc encode
supports outputing blob format
- Bug fix for opt subtyping
- Formalize definitions of IDL-soundness in Coq
- Support the opt subtyping rules
- Allow using Rust keyword as field label
- Add opt subtyping tests
- Rewrite description of deserialization #128
- Add result getter for serializer
- Implement CandidType for std::time::SystemTime and Duration
- Support service constructor
- Export
init
types in JS binding for service constructor - Improve pretty-printing for Candid values: underscore for numerals, blob shorthand for
vec nat8
. - Disable pretty-printing for large vectors.
- Add attribute
#[candid_method]
to derive Candid types for functions. - Add a feature flag
cdk
to generate candid path specifically for Rust CDK.
- Candid UI canister to render a web UI for all running canisters on the network.
- Fix a bug when decoding nested record values.
- Add
encode_args
anddecode_args
functions to encode/decode sequence of arguments.
- Use
ic-types
for Principal (breaking change) - Support type annotations in parsing Candid values
- Support float e notation
- Support nested comments
- Pretty print decoded candid values
- New lexer using the
logos
crate - Use
codespan-reporting
to report Rust-like parsing errors
- Fix deserialization to validate type table and detect infinite loop in
type T = record { T }
- Fix serialization for newtype struct
- Display trait for pretty printing
types::Type
- More test suites for prim and construct types
- Tools for emitting JavaScript tests from Candid test suites
- Publish
didc
andcandiff
binary in the release - Generate JS tests from the Candid test suites
- No longer requires the shortest LEB128 number in deserialization #79
- Parser improvements:
- Floats in fractional number, no e-notation yet
- Comments (no nested comments)
- Blob shorthand for
vec nat8
value - Fix text parser to valiate utf-8 encoding
- Bounds check for bool and text
- Type annotation for reserved
- Initial commit for didc and candiff tools
- Add Candid test suite