From 886cd51e4defb8db34a6c59bdda174b002abf0d0 Mon Sep 17 00:00:00 2001 From: Adam Spofford Date: Tue, 5 May 2026 09:30:39 -0700 Subject: [PATCH 1/4] Add schemars feature to ic_principal --- Cargo.lock | 82 ++++++++++++++++++++++++++++++++---- rust/ic_principal/Cargo.toml | 2 + rust/ic_principal/src/lib.rs | 14 ++++++ 3 files changed, 89 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e0a09b737..8e6ab196c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -542,6 +542,12 @@ dependencies = [ "winapi", ] +[[package]] +name = "dyn-clone" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" + [[package]] name = "either" version = "1.13.0" @@ -709,6 +715,7 @@ dependencies = [ "data-encoding", "impls", "rangemap", + "schemars", "serde", "serde_cbor", "serde_json", @@ -1197,6 +1204,26 @@ dependencies = [ "thiserror", ] +[[package]] +name = "ref-cast" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" +dependencies = [ + "proc-macro2 1.0.86", + "quote 1.0.36", + "syn 2.0.87", +] + [[package]] name = "regex" version = "1.10.5" @@ -1251,12 +1278,6 @@ version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" -[[package]] -name = "ryu" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" - [[package]] name = "same-file" version = "1.0.6" @@ -1266,6 +1287,31 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "schemars" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2b42f36aa1cd011945615b92222f6bf73c599a102a300334cd7f8dbeec726cc" +dependencies = [ + "dyn-clone", + "ref-cast", + "schemars_derive", + "serde", + "serde_json", +] + +[[package]] +name = "schemars_derive" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d115b50f4aaeea07e79c1912f645c7513d81715d0420f8bc77a18c6260b307f" +dependencies = [ + "proc-macro2 1.0.86", + "quote 1.0.36", + "serde_derive_internals", + "syn 2.0.87", +] + [[package]] name = "scopeguard" version = "1.2.0" @@ -1332,16 +1378,28 @@ dependencies = [ "syn 2.0.87", ] +[[package]] +name = "serde_derive_internals" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +dependencies = [ + "proc-macro2 1.0.86", + "quote 1.0.36", + "syn 2.0.87", +] + [[package]] name = "serde_json" -version = "1.0.121" +version = "1.0.149" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ab380d7d9f22ef3f21ad3e6c1ebe8e4fc7a2000ccba2e4d71fc96f15b2cb609" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" dependencies = [ "itoa", "memchr", - "ryu", "serde", + "serde_core", + "zmij", ] [[package]] @@ -1842,3 +1900,9 @@ name = "yansi" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" + +[[package]] +name = "zmij" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" diff --git a/rust/ic_principal/Cargo.toml b/rust/ic_principal/Cargo.toml index 5f889810e..63ade9f24 100644 --- a/rust/ic_principal/Cargo.toml +++ b/rust/ic_principal/Cargo.toml @@ -19,6 +19,7 @@ arbitrary = { workspace = true, optional = true } crc32fast = { version = "1.3.0", optional = true } data-encoding = { version = "2.3.2", optional = true } rangemap = { version = "1.6.0", optional = true } +schemars = { version = "1.2.1", optional = true } serde = { workspace = true, optional = true } sha2 = { version = "0.10.1", optional = true } thiserror = { version = "1.0", optional = true } @@ -35,6 +36,7 @@ default = ['convert', 'self_authenticating', 'serde'] arbitrary = ['dep:arbitrary', 'serde'] convert = ['dep:crc32fast', 'dep:data-encoding', 'dep:thiserror'] self_authenticating = ['dep:sha2'] +schemars = ['dep:schemars', 'serde'] serde = ['dep:serde', 'convert'] rangemap = ['dep:rangemap'] diff --git a/rust/ic_principal/src/lib.rs b/rust/ic_principal/src/lib.rs index 7dfddfd5f..bc473fc5f 100644 --- a/rust/ic_principal/src/lib.rs +++ b/rust/ic_principal/src/lib.rs @@ -440,3 +440,17 @@ impl rangemap::StepLite for Principal { new } } + +#[cfg(feature = "schemars")] +impl schemars::JsonSchema for Principal { + fn schema_name() -> std::borrow::Cow<'static, str> { + "Principal".into() + } + + fn json_schema(_: &mut schemars::SchemaGenerator) -> schemars::Schema { + schemars::json_schema!({ + "type": "string", + "description": "ICP principal in text format." + }) + } +} From 687499a063349ada60651d44c0b0933b8dfe3786 Mon Sep 17 00:00:00 2001 From: Adam Spofford Date: Tue, 5 May 2026 09:40:58 -0700 Subject: [PATCH 2/4] release 0.1.3 --- Cargo.lock | 4 ++-- rust/ic_principal/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8e6ab196c..26107e46c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -218,7 +218,7 @@ dependencies = [ "candid_derive 0.10.27", "candid_parser 0.3.1", "hex", - "ic_principal 0.1.2", + "ic_principal 0.1.3", "leb128", "num-bigint", "num-traits", @@ -708,7 +708,7 @@ dependencies = [ [[package]] name = "ic_principal" -version = "0.1.2" +version = "0.1.3" dependencies = [ "arbitrary", "crc32fast", diff --git a/rust/ic_principal/Cargo.toml b/rust/ic_principal/Cargo.toml index 63ade9f24..1d0a323fc 100644 --- a/rust/ic_principal/Cargo.toml +++ b/rust/ic_principal/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ic_principal" -version = "0.1.2" +version = "0.1.3" authors = ["DFINITY Stiftung "] edition = "2021" rust-version.workspace = true From 0f821093d51dabbee68e0b1858e0fe43355a4a85 Mon Sep 17 00:00:00 2001 From: Adam Spofford Date: Tue, 5 May 2026 10:00:41 -0700 Subject: [PATCH 3/4] fix --- rust/candid/fuzz/Cargo.lock | 8 ++++---- rust/candid_parser/src/bindings/analysis.rs | 16 ++++++---------- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/rust/candid/fuzz/Cargo.lock b/rust/candid/fuzz/Cargo.lock index 59f1cd8bc..c046c15f3 100644 --- a/rust/candid/fuzz/Cargo.lock +++ b/rust/candid/fuzz/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "anyhow" @@ -66,7 +66,7 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "candid" -version = "0.10.8" +version = "0.10.27" dependencies = [ "anyhow", "binread", @@ -97,7 +97,7 @@ dependencies = [ [[package]] name = "candid_derive" -version = "0.6.6" +version = "0.10.27" dependencies = [ "lazy_static", "proc-macro2", @@ -190,7 +190,7 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "ic_principal" -version = "0.1.1" +version = "0.1.3" dependencies = [ "arbitrary", "crc32fast", diff --git a/rust/candid_parser/src/bindings/analysis.rs b/rust/candid_parser/src/bindings/analysis.rs index edd316bc7..2633c6f08 100644 --- a/rust/candid_parser/src/bindings/analysis.rs +++ b/rust/candid_parser/src/bindings/analysis.rs @@ -42,12 +42,10 @@ pub fn chase_type<'a>( ) -> Result<()> { use TypeInner::*; match t.as_ref() { - Var(id) => { - if seen.insert(id) { - let t = env.find_type(id)?; - chase_type(seen, res, env, t)?; - res.push(id); - } + Var(id) if seen.insert(id) => { + let t = env.find_type(id)?; + chase_type(seen, res, env, t)?; + res.push(id); } Opt(ty) | Vec(ty) => chase_type(seen, res, env, ty)?, Record(fs) | Variant(fs) => { @@ -147,10 +145,8 @@ pub fn infer_rec<'a>(_env: &'a TypeEnv, def_list: &'a [&'a str]) -> Result Result<()> { use TypeInner::*; match t.as_ref() { - Var(id) => { - if seen.insert(id) { - res.insert(id); - } + Var(id) if seen.insert(id) => { + res.insert(id); } Opt(ty) | Vec(ty) => go(seen, res, _env, ty)?, Record(fs) | Variant(fs) => { From 3ad989a1801016c39bf9e6ae8e08d236d402c185 Mon Sep 17 00:00:00 2001 From: Linwei Shang Date: Tue, 5 May 2026 13:12:58 -0400 Subject: [PATCH 4/4] fix: bench lock --- rust/bench/Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/bench/Cargo.lock b/rust/bench/Cargo.lock index 9b15a6219..e67a9e090 100644 --- a/rust/bench/Cargo.lock +++ b/rust/bench/Cargo.lock @@ -507,7 +507,7 @@ checksum = "8de254dd67bbd58073e23dc1c8553ba12fa1dc610a19de94ad2bbcd0460c067f" [[package]] name = "ic_principal" -version = "0.1.2" +version = "0.1.3" dependencies = [ "arbitrary", "crc32fast",