Skip to content

Commit e9ed7a1

Browse files
committed
pr: do not use serde_with
1 parent a1975d8 commit e9ed7a1

File tree

4 files changed

+42
-6
lines changed

4 files changed

+42
-6
lines changed

Cargo.lock

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

programs/sbf/Cargo.lock

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

runtime/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ regex = { workspace = true }
4646
serde = { workspace = true, features = ["rc"] }
4747
serde_derive = { workspace = true }
4848
serde_json = { workspace = true }
49-
serde_with = { workspace = true }
5049
solana-accounts-db = { workspace = true }
5150
solana-address-lookup-table-program = { workspace = true }
5251
solana-bpf-loader-program = { workspace = true }

runtime/src/serde_snapshot/types.rs

Lines changed: 42 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,48 @@
1+
use {
2+
serde::{de, Deserialize, Deserializer},
3+
std::{fmt, marker::PhantomData},
4+
};
5+
16
/// Snapshot serde-safe AccountsLtHash
27
#[cfg_attr(feature = "frozen-abi", derive(AbiExample))]
3-
#[serde_with::serde_as]
4-
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
8+
#[derive(Debug)]
59
pub struct SerdeAccountsLtHash(
610
// serde only has array support up to 32 elements; anything larger needs to be handled manually
711
// see https://github.com/serde-rs/serde/issues/1937 for more information
8-
#[serde_as(as = "[_; 1024]")] pub [u16; 1024],
12+
pub [u16; 1024],
913
);
14+
15+
impl<'de> Deserialize<'de> for SerdeAccountsLtHash {
16+
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
17+
where
18+
D: Deserializer<'de>,
19+
{
20+
struct ArrayVisitor {
21+
element: PhantomData<u16>,
22+
}
23+
impl<'de> de::Visitor<'de> for ArrayVisitor {
24+
type Value = [u16; 1024];
25+
fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
26+
formatter.write_str(concat!("a u16 array of length 1024"))
27+
}
28+
fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
29+
where
30+
A: de::SeqAccess<'de>,
31+
{
32+
let mut arr = [0u16; 1024];
33+
for (i, elem) in arr.iter_mut().enumerate() {
34+
*elem = seq
35+
.next_element()?
36+
.ok_or_else(|| de::Error::invalid_length(i, &self))?;
37+
}
38+
Ok(arr)
39+
}
40+
}
41+
42+
let visitor = ArrayVisitor {
43+
element: PhantomData,
44+
};
45+
let array = deserializer.deserialize_tuple(1024, visitor)?;
46+
Ok(Self(array))
47+
}
48+
}

0 commit comments

Comments
 (0)