From af4d06ae366658729873d117c73e2c56962c6c81 Mon Sep 17 00:00:00 2001 From: Antonio Yang Date: Wed, 26 Aug 2026 09:49:43 +0800 Subject: [PATCH 1/3] ci: fix catalyst check script --- complex-example/substrate/Cargo.toml | 2 +- flake.nix | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/complex-example/substrate/Cargo.toml b/complex-example/substrate/Cargo.toml index 2fd8e36..f39a444 100644 --- a/complex-example/substrate/Cargo.toml +++ b/complex-example/substrate/Cargo.toml @@ -16,5 +16,5 @@ struct-patch.workspace = true serde = { version = "1", features = ["derive"] } [dev-dependencies] -syn = { version = "3", features = ["full"] } +syn = { version = "2", features = ["full"] } syn-serde = { version = "0.3.2", features = ["json"] } diff --git a/flake.nix b/flake.nix index 3f1a745..9754dc1 100644 --- a/flake.nix +++ b/flake.nix @@ -20,6 +20,7 @@ cargo publish -p struct-patch ''; checkCatalystScript = pkgs.writeShellScriptBin "check-catalyst" '' + set -ex cd $(git rev-parse --show-toplevel 2>/dev/null) cd complex-example cargo test -p substrate From 81fc994167e357dacd0fff6a77e3c9f30a3341a8 Mon Sep 17 00:00:00 2001 From: Antonio Yang Date: Wed, 26 Aug 2026 23:45:20 +0800 Subject: [PATCH 2/3] update substrate test with customized struct --- complex-example/substrate/src/lib.rs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/complex-example/substrate/src/lib.rs b/complex-example/substrate/src/lib.rs index 5fae9ce..a241d9a 100644 --- a/complex-example/substrate/src/lib.rs +++ b/complex-example/substrate/src/lib.rs @@ -10,6 +10,13 @@ pub struct Base { pub field_string: String, pub field_option: Option, private_number: u8, + pub filed_numbers: PhoneNumber, +} + +#[derive(Deserialize, Default)] +pub struct PhoneNumber { + country_code: u8, + local_numbers: String, } impl Base { @@ -30,7 +37,7 @@ mod tests { fn expose_works() { assert_eq!( Base::expose_content(), - r#"{"named":[{"attrs":[{"style":"outer","meta":{"list":{"path":{"segments":[{"ident":"serde"}]},"delimiter":"paren","tokens":[{"ident":"default"}]}}}],"vis":"pub","ident":"field_bool","colon_token":true,"ty":{"path":{"segments":[{"ident":"bool"}]}}},{"vis":"pub","ident":"field_string","colon_token":true,"ty":{"path":{"segments":[{"ident":"String"}]}}},{"vis":"pub","ident":"field_option","colon_token":true,"ty":{"path":{"segments":[{"ident":"Option","arguments":{"angle_bracketed":{"args":[{"type":{"path":{"segments":[{"ident":"usize"}]}}}]}}}]}}},{"ident":"private_number","colon_token":true,"ty":{"path":{"segments":[{"ident":"u8"}]}}}]}"# + r#"{"named":[{"attrs":[{"style":"outer","meta":{"list":{"path":{"segments":[{"ident":"serde"}]},"delimiter":"paren","tokens":[{"ident":"default"}]}}}],"vis":"pub","ident":"field_bool","colon_token":true,"ty":{"path":{"segments":[{"ident":"bool"}]}}},{"vis":"pub","ident":"field_string","colon_token":true,"ty":{"path":{"segments":[{"ident":"String"}]}}},{"vis":"pub","ident":"field_option","colon_token":true,"ty":{"path":{"segments":[{"ident":"Option","arguments":{"angle_bracketed":{"args":[{"type":{"path":{"segments":[{"ident":"usize"}]}}}]}}}]}}},{"ident":"private_number","colon_token":true,"ty":{"path":{"segments":[{"ident":"u8"}]}}},{"vis":"pub","ident":"filed_numbers","colon_token":true,"ty":{"path":{"segments":[{"ident":"PhoneNumber"}]}}}]}"# ); let _fields: syn::Fields = syn_serde::json::from_str(&Base::expose_content()).unwrap(); @@ -43,6 +50,7 @@ mod tests { "test".to_string(), Some(100), 7u8, + PhoneNumber::default(), ); assert_eq!(b.field_bool, true); assert_eq!(b.field_string, "test"); @@ -57,8 +65,9 @@ mod tests { "test".to_string(), Some(100), 7u8, + PhoneNumber::default(), ); - let (field_bool, field_string, field_option, private_number) = b.__substrate_unpack(); + let (field_bool, field_string, field_option, private_number, _filed_numbers) = b.__substrate_unpack(); assert_eq!(field_bool, true); assert_eq!(field_string, "test"); From e27db5a09f278ad38b858de309b68772bbf9d0d4 Mon Sep 17 00:00:00 2001 From: Antonio Yang Date: Wed, 26 Aug 2026 23:55:28 +0800 Subject: [PATCH 3/3] add custom struct field in catalyst test --- complex-example/catalyst/src/lib.rs | 9 ++++++++- complex-example/substrate/src/lib.rs | 4 ++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/complex-example/catalyst/src/lib.rs b/complex-example/catalyst/src/lib.rs index 023d57d..958248c 100644 --- a/complex-example/catalyst/src/lib.rs +++ b/complex-example/catalyst/src/lib.rs @@ -1,6 +1,6 @@ use serde::{Deserialize, Serialize}; use struct_patch::Catalyst; -use substrate::Base; +use substrate::{Base, PhoneNumber}; #[derive(Default, Catalyst)] #[catalyst(bind = Base)] @@ -8,6 +8,7 @@ use substrate::Base; // so the complex should have the corresponding Serialize derive #[catalyst(keep_field_attribute)] #[complex(attribute(derive(Debug, Deserialize, Serialize)))] +#[complex(override_field_attribute("filed_numbers", serde(default)))] #[allow(dead_code)] struct Amyloid { pub extra_bool: bool, @@ -39,6 +40,7 @@ impl AmyloidComplex { #[catalyst(keep_field_attribute)] #[catalyst(exclude_field_attributes = ["serde"])] #[complex(attribute(derive(Debug, Deserialize)))] +#[complex(override_field_attribute("filed_numbers", serde(default)))] #[allow(dead_code)] struct ExcludedAmyloid { pub extra_bool: bool, @@ -51,6 +53,7 @@ struct ExcludedAmyloid { #[complex(attribute(derive(Default, Deserialize)))] #[complex(override_field_attribute("field_string", serde(default = "default_str")))] #[complex(override_field_attribute("field_string", serde(rename = "renamed_field")))] +#[complex(override_field_attribute("filed_numbers", serde(default)))] struct SmallAmyloid { pub extra_bool: bool, } @@ -95,6 +98,10 @@ private_number = 0 extra_bool = false extra_string = "" extra_private_number = 0 + +[filed_numbers] +country_code = 0 +local_numbers = "" "# ); let toml_str = r#" field_bool = true diff --git a/complex-example/substrate/src/lib.rs b/complex-example/substrate/src/lib.rs index a241d9a..47e4c58 100644 --- a/complex-example/substrate/src/lib.rs +++ b/complex-example/substrate/src/lib.rs @@ -1,5 +1,5 @@ #![allow(unused)] -use serde::Deserialize; +use serde::{Deserialize, Serialize}; use struct_patch::Substrate; // TODO verify no rename on a struct using Substrate @@ -13,7 +13,7 @@ pub struct Base { pub filed_numbers: PhoneNumber, } -#[derive(Deserialize, Default)] +#[derive(Debug, Deserialize, Serialize, Default)] pub struct PhoneNumber { country_code: u8, local_numbers: String,