Skip to content

Commit af9a416

Browse files
committed
BREAKING: human readable de/ser for shortvec
1 parent eeae20d commit af9a416

File tree

5 files changed

+65
-13
lines changed

5 files changed

+65
-13
lines changed

message/src/legacy.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ fn compile_instructions(ixs: &[Instruction], keys: &[Address]) -> Vec<CompiledIn
6666
// for versioned messages in the `RemainingLegacyMessage` struct.
6767
#[cfg_attr(
6868
feature = "frozen-abi",
69-
frozen_abi(digest = "GXpvLNiMCnjnZpQEDKpc2NBpsqmRnAX7ZTCy9JmvG8Dg"),
69+
frozen_abi(digest = "AhkTFHhRftw61EGDjZcMZhoLozeSnb1gRRZmQeoaPXeE"),
7070
derive(AbiExample)
7171
)]
7272
#[cfg_attr(

message/src/versions/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ pub const MESSAGE_VERSION_PREFIX: u8 = 0x80;
3838
/// format.
3939
#[cfg_attr(
4040
feature = "frozen-abi",
41-
frozen_abi(digest = "AbhbWKcm8BEickDjeXN7mL4BTvrqvhVKv7ZXNykq22ck"),
41+
frozen_abi(digest = "7yd5QJuxKgmkEt2ig4X91pCJCfTtjZVarMSzJ4eWzBrE"),
4242
derive(AbiEnumVisitor, AbiExample)
4343
)]
4444
#[derive(Debug, PartialEq, Eq, Clone)]

message/src/versions/v0/mod.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ pub use loaded::*;
1313
#[cfg(feature = "serde")]
1414
use serde_derive::{Deserialize, Serialize};
1515
#[cfg(feature = "frozen-abi")]
16-
use solana_frozen_abi_macro::AbiExample;
16+
use solana_frozen_abi_macro::{frozen_abi, AbiExample};
1717
use {
1818
crate::{
1919
compiled_instruction::CompiledInstruction,
@@ -57,7 +57,11 @@ pub struct MessageAddressTableLookup {
5757
///
5858
/// See the crate documentation for further description.
5959
///
60-
#[cfg_attr(feature = "frozen-abi", derive(AbiExample))]
60+
#[cfg_attr(
61+
feature = "frozen-abi",
62+
frozen_abi(digest = "4Mr6qK8Srdgr7PyeZjXy99ekj5pwHQSbNCVD3TmzcxTM"),
63+
derive(AbiExample)
64+
)]
6165
#[cfg_attr(
6266
feature = "serde",
6367
derive(Deserialize, Serialize),

short-vec/src/lib.rs

Lines changed: 56 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ impl Serialize for ShortU16 {
2626
where
2727
S: Serializer,
2828
{
29+
if serializer.is_human_readable() {
30+
return serializer.serialize_u16(self.0);
31+
}
32+
2933
// Pass a non-zero value to serialize_tuple() so that serde_json will
3034
// generate an open bracket.
3135
let mut seq = serializer.serialize_tuple(1)?;
@@ -155,7 +159,11 @@ impl<'de> Deserialize<'de> for ShortU16 {
155159
where
156160
D: Deserializer<'de>,
157161
{
158-
deserializer.deserialize_tuple(3, ShortU16Visitor)
162+
if deserializer.is_human_readable() {
163+
Ok(ShortU16(u16::deserialize(deserializer)?))
164+
} else {
165+
deserializer.deserialize_tuple(3, ShortU16Visitor)
166+
}
159167
}
160168
}
161169

@@ -168,6 +176,15 @@ pub fn serialize<S: Serializer, T: Serialize>(
168176
elements: &[T],
169177
serializer: S,
170178
) -> Result<S::Ok, S::Error> {
179+
if serializer.is_human_readable() {
180+
use serde_core::ser::SerializeSeq;
181+
let mut seq = serializer.serialize_seq(Some(elements.len()))?;
182+
for element in elements {
183+
seq.serialize_element(element)?;
184+
}
185+
return seq.end();
186+
}
187+
171188
// Pass a non-zero value to serialize_tuple() so that serde_json will
172189
// generate an open bracket.
173190
let mut seq = serializer.serialize_tuple(1)?;
@@ -229,6 +246,9 @@ where
229246
D: Deserializer<'de>,
230247
T: Deserialize<'de>,
231248
{
249+
if deserializer.is_human_readable() {
250+
return <Vec<T> as Deserialize<'de>>::deserialize(deserializer);
251+
}
232252
let visitor = ShortVecVisitor { _t: PhantomData };
233253
deserializer.deserialize_tuple(usize::MAX, visitor)
234254
}
@@ -274,8 +294,43 @@ mod tests {
274294
super::*,
275295
assert_matches::assert_matches,
276296
bincode::{deserialize, serialize},
297+
std::u16,
277298
};
278299

300+
#[test]
301+
fn test_short_u16_human_readable_serialization() {
302+
let value = ShortU16(0u16);
303+
let string = serde_json::to_string(&value).unwrap();
304+
let expected_string = String::from("0");
305+
assert_eq!(string, expected_string);
306+
let deser_value: ShortU16 = serde_json::from_str(&string).unwrap();
307+
assert_eq!(value.0, deser_value.0);
308+
309+
let value = ShortU16(u16::MAX);
310+
let string = serde_json::to_string(&value).unwrap();
311+
let expected_string = String::from("65535");
312+
assert_eq!(string, expected_string);
313+
let deser_value: ShortU16 = serde_json::from_str(&string).unwrap();
314+
assert_eq!(value.0, deser_value.0);
315+
}
316+
317+
#[test]
318+
fn test_short_vec_human_readable_serialization() {
319+
let value = ShortVec::<()>(vec![]);
320+
let string = serde_json::to_string(&value).unwrap();
321+
let expected_string = String::from("[]");
322+
assert_eq!(string, expected_string);
323+
let deser_value: ShortVec<()> = serde_json::from_str(&string).unwrap();
324+
assert_eq!(value.0, deser_value.0);
325+
326+
let value = ShortVec(vec![1, 2, 3]);
327+
let string = serde_json::to_string(&value).unwrap();
328+
let expected_string = String::from("[1,2,3]");
329+
assert_eq!(string, expected_string);
330+
let deser_value: ShortVec<usize> = serde_json::from_str(&string).unwrap();
331+
assert_eq!(value.0, deser_value.0);
332+
}
333+
279334
/// Return the serialized length.
280335
fn encode_len(len: u16) -> Vec<u8> {
281336
bincode::serialize(&ShortU16(len)).unwrap()
@@ -372,13 +427,6 @@ mod tests {
372427
assert_matches!(serialize(&vec), Err(_));
373428
}
374429

375-
#[test]
376-
fn test_short_vec_json() {
377-
let vec = ShortVec(vec![0, 1, 2]);
378-
let s = serde_json::to_string(&vec).unwrap();
379-
assert_eq!(s, "[[3],0,1,2]");
380-
}
381-
382430
#[test]
383431
fn test_short_vec_aliased_length() {
384432
let bytes = [

transaction/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ const NONCED_TX_MARKER_IX_INDEX: u8 = 0;
177177
#[cfg_attr(
178178
feature = "frozen-abi",
179179
derive(solana_frozen_abi_macro::AbiExample),
180-
solana_frozen_abi_macro::frozen_abi(digest = "BLig4G2ysd7dcensK9bhKtnKvCQc1n65XdanyzsdWGXN")
180+
solana_frozen_abi_macro::frozen_abi(digest = "5V7i4Tngkou3ieDNdtPpwYaFZpe2S2vZL71wrdJq5zTQ")
181181
)]
182182
#[cfg_attr(feature = "serde", derive(Deserialize, Serialize))]
183183
#[derive(Debug, PartialEq, Default, Eq, Clone)]

0 commit comments

Comments
 (0)