From 2dfa9f3f2a48482156e40a3b48e52e37f9dd15c8 Mon Sep 17 00:00:00 2001 From: Hakan Seven Date: Tue, 6 Oct 2026 11:06:44 +0300 Subject: [PATCH] Cargo: codec 1ca7d33 (acadrust 0.6.0 sync), kernel 7fb0abb, graph d7908a8 The codec now carries upstream acadrust 0.6.0 (foldhash, thiserror 2, MLINE / legacy class / layer handle fixes). Its new Spline::dwg_scenario is serde-skipped, so the Python plugin's generated entity records could not name it; they now take such fields from the type's Default. Co-Authored-By: Claude Opus 5.5 --- Cargo.lock | 15 +++++++-------- Cargo.toml | 8 ++++---- crates/ocs_plugin_api/Cargo.toml | 4 ++-- crates/ocs_web_worker/Cargo.toml | 2 +- plugins/opencad-python/Cargo.lock | 9 ++++----- plugins/opencad-python/build/generate.rs | 14 ++++++++++++-- 6 files changed, 30 insertions(+), 22 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 85762f6fa..d079feccb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -128,7 +128,6 @@ dependencies = [ "cfg-if", "getrandom 0.3.4", "once_cell", - "serde", "version_check", "zerocopy", ] @@ -4205,15 +4204,15 @@ dependencies = [ [[package]] name = "opencadcodec" -version = "0.5.5" -source = "git+https://github.com/HakanSeven12/opencadcodec.git?rev=04b26f2#04b26f2c992110c1da4ed6bc0491d76906fbf4e5" +version = "0.6.0" +source = "git+https://github.com/HakanSeven12/opencadcodec.git?rev=1ca7d33#1ca7d3360a34384b59297ffe8aa18b157d2701d9" dependencies = [ - "ahash 0.8.12", "anyhow", "bitflags 2.13.1", "byteorder", "encoding_rs", "flate2", + "foldhash 0.2.0", "indexmap", "itoa", "memmap2", @@ -4222,14 +4221,14 @@ dependencies = [ "rayon", "ryu", "serde", - "thiserror 1.0.69", + "thiserror 2.0.18", "web-time", ] [[package]] name = "opencadgraph" version = "0.1.0" -source = "git+https://github.com/HakanSeven12/opencadgraph.git?rev=e7f8b45#e7f8b456b462a2b71b923674798876ef27d10d3c" +source = "git+https://github.com/HakanSeven12/opencadgraph.git?rev=d7908a8#d7908a8d24a42896b03f7f83b3a1c0187692043a" dependencies = [ "opencadkernel", "serde_json", @@ -4238,7 +4237,7 @@ dependencies = [ [[package]] name = "opencadkernel" version = "0.1.0" -source = "git+https://github.com/HakanSeven12/opencadkernel.git?rev=16059db#16059dbdbef0ecbc7310c2f5d1a32615c67ee6e2" +source = "git+https://github.com/HakanSeven12/opencadkernel.git?rev=7fb0abb#7fb0abb4ee8e4266a770eb673ac7757c71321513" dependencies = [ "cavalier_contours", "opencadcodec", @@ -4249,7 +4248,7 @@ dependencies = [ [[package]] name = "opencadkernel-constraints" version = "0.1.0" -source = "git+https://github.com/HakanSeven12/opencadkernel.git?rev=16059db#16059dbdbef0ecbc7310c2f5d1a32615c67ee6e2" +source = "git+https://github.com/HakanSeven12/opencadkernel.git?rev=7fb0abb#7fb0abb4ee8e4266a770eb673ac7757c71321513" dependencies = [ "nalgebra", ] diff --git a/Cargo.toml b/Cargo.toml index 86fcca40e..a1638dc46 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -34,10 +34,10 @@ rfd = "0.17" clap = { version = "4", features = ["derive", "string"] } env_logger = "0.11" log = "0.4" -codec = { package = "opencadcodec", git = "https://github.com/HakanSeven12/opencadcodec.git", rev = "04b26f2", features = ["serde"] } -kernel = { package = "opencadkernel", git = "https://github.com/HakanSeven12/opencadkernel.git", rev = "16059db", features = ["acis", "offset"] } -kernel-constraints = { package = "opencadkernel-constraints", git = "https://github.com/HakanSeven12/opencadkernel.git", rev = "16059db" } -graph = { package = "opencadgraph", git = "https://github.com/HakanSeven12/opencadgraph.git", rev = "e7f8b45" } +codec = { package = "opencadcodec", git = "https://github.com/HakanSeven12/opencadcodec.git", rev = "1ca7d33", features = ["serde"] } +kernel = { package = "opencadkernel", git = "https://github.com/HakanSeven12/opencadkernel.git", rev = "7fb0abb", features = ["acis", "offset"] } +kernel-constraints = { package = "opencadkernel-constraints", git = "https://github.com/HakanSeven12/opencadkernel.git", rev = "7fb0abb" } +graph = { package = "opencadgraph", git = "https://github.com/HakanSeven12/opencadgraph.git", rev = "d7908a8" } dwg-thumbnailer = { path = "crates/dwg-thumbnailer" } flate2 = "1" image = { version = "0.25", default-features = false, features = ["png", "jpeg", "bmp", "tiff"] } diff --git a/crates/ocs_plugin_api/Cargo.toml b/crates/ocs_plugin_api/Cargo.toml index 22cbe1ba9..852c56700 100644 --- a/crates/ocs_plugin_api/Cargo.toml +++ b/crates/ocs_plugin_api/Cargo.toml @@ -15,7 +15,7 @@ serde_json = { version = "1", optional = true } # Pulled in only by the `host` feature, which adds the `opencadcodec`-typed # `HostApi` runtime surface. The default crate stays dependency-free so engine # crates and external tooling can depend on the manifest/ribbon contract cheaply. -codec = { package = "opencadcodec", git = "https://github.com/HakanSeven12/opencadcodec.git", rev = "04b26f2", optional = true, features = ["serde"] } +codec = { package = "opencadcodec", git = "https://github.com/HakanSeven12/opencadcodec.git", rev = "1ca7d33", optional = true, features = ["serde"] } # Runtime IPC and serialization (host feature only). interprocess = { version = "2", optional = true } @@ -39,7 +39,7 @@ serde_json = "1" serde = { version = "1", features = ["derive"] } cargo-lock = "11" # opencadcodec is scanned at build time to generate the embedded type registry. -codec = { package = "opencadcodec", git = "https://github.com/HakanSeven12/opencadcodec.git", rev = "04b26f2", features = ["serde"] } +codec = { package = "opencadcodec", git = "https://github.com/HakanSeven12/opencadcodec.git", rev = "1ca7d33", features = ["serde"] } [dev-dependencies] serde_json = "1" diff --git a/crates/ocs_web_worker/Cargo.toml b/crates/ocs_web_worker/Cargo.toml index 4b657ea10..a6be242eb 100644 --- a/crates/ocs_web_worker/Cargo.toml +++ b/crates/ocs_web_worker/Cargo.toml @@ -8,7 +8,7 @@ publish = false crate-type = ["cdylib"] [dependencies] -codec = { package = "opencadcodec", git = "https://github.com/HakanSeven12/opencadcodec.git", rev = "04b26f2", features = ["serde"] } +codec = { package = "opencadcodec", git = "https://github.com/HakanSeven12/opencadcodec.git", rev = "1ca7d33", features = ["serde"] } bincode = "1.3" serde = { version = "1", features = ["derive"] } console_error_panic_hook = "0.1" diff --git a/plugins/opencad-python/Cargo.lock b/plugins/opencad-python/Cargo.lock index 172a1ea29..17eec73b6 100644 --- a/plugins/opencad-python/Cargo.lock +++ b/plugins/opencad-python/Cargo.lock @@ -28,7 +28,6 @@ dependencies = [ "cfg-if", "getrandom 0.3.4", "once_cell", - "serde", "version_check", "zerocopy", ] @@ -1264,15 +1263,15 @@ dependencies = [ [[package]] name = "opencadcodec" -version = "0.5.5" -source = "git+https://github.com/HakanSeven12/opencadcodec.git?rev=04b26f2#04b26f2c992110c1da4ed6bc0491d76906fbf4e5" +version = "0.6.0" +source = "git+https://github.com/HakanSeven12/opencadcodec.git?rev=1ca7d33#1ca7d3360a34384b59297ffe8aa18b157d2701d9" dependencies = [ - "ahash 0.8.12", "anyhow", "bitflags", "byteorder", "encoding_rs", "flate2", + "foldhash", "indexmap", "itoa", "memmap2", @@ -1281,7 +1280,7 @@ dependencies = [ "rayon", "ryu", "serde", - "thiserror 1.0.69", + "thiserror 2.0.20", "web-time", ] diff --git a/plugins/opencad-python/build/generate.rs b/plugins/opencad-python/build/generate.rs index e5a093028..633819b96 100644 --- a/plugins/opencad-python/build/generate.rs +++ b/plugins/opencad-python/build/generate.rs @@ -693,6 +693,14 @@ fn gen_struct(name: &str, info: &TypeInfo, registry: &TypeRegistry, required: &[ .map(|field| format!("\"{field}\"")) .collect::>() .join(", "); + // Fields the codec keeps out of serde (`#[serde(skip)]`) are invisible to + // the traced registry; entity records default them through their own + // `Default` instead of failing to construct. + let rest = if info.fields.iter().any(|f| f.type_id.as_str() == "EntityCommon") { + " ..Default::default()\n" + } else { + "" + }; for f in &info.fields { if f.type_id.as_str() == "EntityCommon" { // A sub-record's own common data (layer, XDATA, handles) is not part @@ -750,14 +758,16 @@ fn dict_to_{snake}(value: PyObjectRef, vm: &VirtualMachine) -> PyResult<{path}> return Err(vm.new_value_error(format!("{name} needs {{required}}"))); }} }} + #[allow(clippy::needless_update)] Ok({path} {{ -{from_dict_fields} }}) +{from_dict_fields}{rest} }}) }} #[allow(dead_code)] fn default_{snake}() -> {path} {{ + #[allow(clippy::needless_update)] {path} {{ -{default_fields} }} +{default_fields}{rest} }} }} "#