Skip to content

Commit a624905

Browse files
authored
feat(interface): support wincode serialization (#348)
1 parent 4c2694a commit a624905

6 files changed

Lines changed: 46 additions & 39 deletions

File tree

Cargo.lock

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

interface/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ solana-pubkey = { version = "4.2.0", default-features = false }
3333
solana-system-interface = "3.0.0"
3434
solana-sysvar = { version = "4.0.0", optional = true }
3535
solana-sysvar-id = { version = "3.1.0", optional = true }
36+
wincode = { version = "0.5.2", features = ["derive"], optional = true }
3637

3738
[target.'cfg(not(target_os = "solana"))'.dependencies]
3839
serde_json = { version = "1.0", optional = true }
@@ -82,3 +83,4 @@ frozen-abi = [
8283
]
8384
serde = ["dep:serde", "dep:serde_derive", "solana-pubkey/serde", "solana-sysvar/serde"]
8485
sysvar = ["dep:solana-sysvar", "dep:solana-sysvar-id"]
86+
wincode = ["dep:wincode", "solana-pubkey/wincode"]

interface/src/error.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ use {
1313
feature = "serde",
1414
derive(serde_derive::Deserialize, serde_derive::Serialize)
1515
)]
16+
#[cfg_attr(feature = "wincode", derive(wincode::SchemaRead, wincode::SchemaWrite))]
1617
pub enum StakeError {
1718
// 0
1819
/// Not enough credits to redeem.

interface/src/stake_flags.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
use borsh::{BorshDeserialize, BorshSchema, BorshSerialize};
33

44
/// Additional flags for stake state.
5+
#[repr(transparent)]
56
#[cfg_attr(feature = "codama", derive(codama_macros::CodamaType))]
67
#[derive(Copy, PartialEq, Eq, Clone, PartialOrd, Ord, Hash, Debug)]
78
#[cfg_attr(feature = "frozen-abi", derive(solana_frozen_abi_macro::AbiExample))]
@@ -14,6 +15,7 @@ use borsh::{BorshDeserialize, BorshSchema, BorshSerialize};
1415
feature = "serde",
1516
derive(serde_derive::Deserialize, serde_derive::Serialize)
1617
)]
18+
#[cfg_attr(feature = "wincode", derive(wincode::SchemaRead, wincode::SchemaWrite))]
1719
pub struct StakeFlags {
1820
bits: u8,
1921
}

interface/src/stake_history.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ pub const MAX_ENTRIES: usize = 512; // it should never take as many as 512 epoch
1313
feature = "serde",
1414
derive(serde_derive::Deserialize, serde_derive::Serialize)
1515
)]
16+
#[cfg_attr(feature = "wincode", derive(wincode::SchemaRead, wincode::SchemaWrite))]
1617
#[derive(Debug, PartialEq, Eq, Default, Clone)]
1718
pub struct StakeHistoryEntry {
1819
pub effective: u64, // effective stake at this epoch
@@ -62,6 +63,7 @@ impl std::ops::Add for StakeHistoryEntry {
6263
feature = "serde",
6364
derive(serde_derive::Deserialize, serde_derive::Serialize)
6465
)]
66+
#[cfg_attr(feature = "wincode", derive(wincode::SchemaRead, wincode::SchemaWrite))]
6567
#[derive(Debug, PartialEq, Eq, Default, Clone)]
6668
pub struct StakeHistory(Vec<(Epoch, StakeHistoryEntry)>);
6769

interface/src/state.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ impl StakeState {
158158
feature = "serde",
159159
derive(serde_derive::Deserialize, serde_derive::Serialize)
160160
)]
161+
#[cfg_attr(feature = "wincode", derive(wincode::SchemaRead, wincode::SchemaWrite))]
161162
#[allow(clippy::large_enum_variant)]
162163
pub enum StakeStateV2 {
163164
#[default]
@@ -282,11 +283,13 @@ impl StakeStateV2 {
282283
feature = "serde",
283284
derive(serde_derive::Deserialize, serde_derive::Serialize)
284285
)]
286+
#[cfg_attr(feature = "wincode", derive(wincode::SchemaRead, wincode::SchemaWrite))]
285287
pub enum StakeAuthorize {
286288
Staker,
287289
Withdrawer,
288290
}
289291

292+
#[repr(C)]
290293
#[cfg_attr(feature = "codama", derive(CodamaType))]
291294
#[derive(Default, Debug, PartialEq, Eq, Clone, Copy)]
292295
#[cfg_attr(feature = "frozen-abi", derive(solana_frozen_abi_macro::AbiExample))]
@@ -299,6 +302,7 @@ pub enum StakeAuthorize {
299302
feature = "serde",
300303
derive(serde_derive::Deserialize, serde_derive::Serialize)
301304
)]
305+
#[cfg_attr(feature = "wincode", derive(wincode::SchemaRead, wincode::SchemaWrite))]
302306
pub struct Lockup {
303307
/// `UnixTimestamp` at which this stake will allow withdrawal, unless the
304308
/// transaction is signed by the custodian
@@ -319,6 +323,7 @@ impl Lockup {
319323
}
320324
}
321325

326+
#[repr(C)]
322327
#[cfg_attr(feature = "codama", derive(CodamaType))]
323328
#[derive(Default, Debug, PartialEq, Eq, Clone, Copy)]
324329
#[cfg_attr(feature = "frozen-abi", derive(solana_frozen_abi_macro::AbiExample))]
@@ -331,6 +336,7 @@ impl Lockup {
331336
feature = "serde",
332337
derive(serde_derive::Deserialize, serde_derive::Serialize)
333338
)]
339+
#[cfg_attr(feature = "wincode", derive(wincode::SchemaRead, wincode::SchemaWrite))]
334340
pub struct Authorized {
335341
pub staker: Pubkey,
336342
pub withdrawer: Pubkey,
@@ -402,6 +408,7 @@ impl Authorized {
402408
}
403409
}
404410

411+
#[repr(C)]
405412
#[cfg_attr(feature = "codama", derive(CodamaType))]
406413
#[derive(Default, Debug, PartialEq, Eq, Clone, Copy)]
407414
#[cfg_attr(feature = "frozen-abi", derive(solana_frozen_abi_macro::AbiExample))]
@@ -414,6 +421,7 @@ impl Authorized {
414421
feature = "serde",
415422
derive(serde_derive::Deserialize, serde_derive::Serialize)
416423
)]
424+
#[cfg_attr(feature = "wincode", derive(wincode::SchemaRead, wincode::SchemaWrite))]
417425
pub struct Meta {
418426
#[deprecated(
419427
since = "3.0.1",
@@ -462,6 +470,7 @@ impl Meta {
462470
}
463471
}
464472

473+
#[repr(C)]
465474
#[cfg_attr(feature = "codama", derive(CodamaType))]
466475
#[derive(Debug, PartialEq, Clone, Copy)]
467476
#[cfg_attr(feature = "frozen-abi", derive(solana_frozen_abi_macro::AbiExample))]
@@ -474,6 +483,7 @@ impl Meta {
474483
feature = "serde",
475484
derive(serde_derive::Deserialize, serde_derive::Serialize)
476485
)]
486+
#[cfg_attr(feature = "wincode", derive(wincode::SchemaRead, wincode::SchemaWrite))]
477487
pub struct Delegation {
478488
/// to whom the stake is delegated
479489
pub voter_pubkey: Pubkey,
@@ -702,6 +712,7 @@ impl Delegation {
702712
}
703713
}
704714

715+
#[repr(C)]
705716
#[cfg_attr(feature = "codama", derive(CodamaType))]
706717
#[derive(Debug, Default, PartialEq, Clone, Copy)]
707718
#[cfg_attr(feature = "frozen-abi", derive(solana_frozen_abi_macro::AbiExample))]
@@ -714,6 +725,7 @@ impl Delegation {
714725
feature = "serde",
715726
derive(serde_derive::Deserialize, serde_derive::Serialize)
716727
)]
728+
#[cfg_attr(feature = "wincode", derive(wincode::SchemaRead, wincode::SchemaWrite))]
717729
pub struct Stake {
718730
pub delegation: Delegation,
719731
/// credits observed is credits from vote account state when delegated or redeemed

0 commit comments

Comments
 (0)