Skip to content

Commit 9f497fd

Browse files
authored
bug: serde serialize/deserialize big arrays (#405)
1 parent 0df0aca commit 9f497fd

File tree

8 files changed

+50
-9
lines changed

8 files changed

+50
-9
lines changed

.changeset/tiny-bikes-hug.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@codama/renderers-rust': patch
3+
---
4+
5+
bug: serde serialize/deserialize big arrays

packages/renderers-rust/e2e/dummy/Cargo.lock

Lines changed: 10 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/renderers-rust/e2e/dummy/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ edition = "2021"
66
[features]
77
anchor = ["dep:anchor-lang"]
88
anchor-idl-build = ["anchor", "anchor-lang?/idl-build"]
9-
serde = ["dep:serde", "dep:serde_with"]
9+
serde = ["dep:serde", "dep:serde_with", "dep:serde-big-array"]
1010
test-sbf = []
1111

1212
[dependencies]
@@ -17,6 +17,7 @@ num-derive = "^0.3"
1717
num-traits = "^0.2"
1818
serde = { version = "^1.0", features = ["derive"], optional = true }
1919
serde_with = { version = "^3.0", optional = true }
20+
serde-big-array = { version = "^0.5", optional = true }
2021
solana-program = "~1.18"
2122
thiserror = "^1.0"
2223

packages/renderers-rust/e2e/memo/Cargo.lock

Lines changed: 10 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/renderers-rust/e2e/memo/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ edition = "2021"
66
[features]
77
anchor = ["dep:anchor-lang"]
88
anchor-idl-build = ["anchor", "anchor-lang?/idl-build"]
9-
serde = ["dep:serde", "dep:serde_with"]
9+
serde = ["dep:serde", "dep:serde_with", "dep:serde-big-array"]
1010
test-sbf = []
1111

1212
[dependencies]
@@ -17,6 +17,7 @@ num-derive = "^0.3"
1717
num-traits = "^0.2"
1818
serde = { version = "^1.0", features = ["derive"], optional = true }
1919
serde_with = { version = "^3.0", optional = true }
20+
serde-big-array = { version = "^0.5", optional = true }
2021
solana-program = "~1.18"
2122
thiserror = "^1.0"
2223

packages/renderers-rust/e2e/system/Cargo.lock

Lines changed: 10 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/renderers-rust/e2e/system/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ edition = "2021"
66
[features]
77
anchor = ["dep:anchor-lang"]
88
anchor-idl-build = ["anchor", "anchor-lang?/idl-build"]
9-
serde = ["dep:serde", "dep:serde_with"]
9+
serde = ["dep:serde", "dep:serde_with", "dep:serde-big-array"]
1010
test-sbf = []
1111

1212
[dependencies]
@@ -16,6 +16,7 @@ num-derive = "^0.3"
1616
num-traits = "^0.2"
1717
serde = { version = "^1.0", features = ["derive"], optional = true }
1818
serde_with = { version = "^3.0", optional = true }
19+
serde-big-array = { version = "^0.5", optional = true }
1920
solana-program = "~1.18"
2021
thiserror = "^1.0"
2122

packages/renderers-rust/src/getTypeManifestVisitor.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -391,12 +391,15 @@ export function getTypeManifestVisitor(options: {
391391
derive =
392392
'#[cfg_attr(feature = "serde", serde(with = "serde_with::As::<Vec<serde_with::DisplayFromStr>>"))]\n';
393393
} else if (
394-
(isNode(resolvedNestedType, 'arrayTypeNode') &&
395-
isNode(resolvedNestedType.count, 'fixedCountNode') &&
396-
resolvedNestedType.count.value > 32) ||
397-
(isNode(resolvedNestedType, ['bytesTypeNode', 'stringTypeNode']) &&
398-
isNode(structFieldType.type, 'fixedSizeTypeNode') &&
399-
structFieldType.type.size > 32)
394+
isNode(resolvedNestedType, 'arrayTypeNode') &&
395+
isNode(resolvedNestedType.count, 'fixedCountNode') &&
396+
resolvedNestedType.count.value > 32
397+
) {
398+
derive = '#[cfg_attr(feature = "serde", serde(with = "serde_big_array::BigArray"))]\n';
399+
} else if (
400+
isNode(resolvedNestedType, ['bytesTypeNode', 'stringTypeNode']) &&
401+
isNode(structFieldType.type, 'fixedSizeTypeNode') &&
402+
structFieldType.type.size > 32
400403
) {
401404
derive =
402405
'#[cfg_attr(feature = "serde", serde(with = "serde_with::As::<serde_with::Bytes>"))]\n';

0 commit comments

Comments
 (0)