Skip to content

Commit

Permalink
Define generic AbiExample for OnceLock (solana-labs#33520)
Browse files Browse the repository at this point in the history
* Define generic AbiExample for OnceLock

* Guard with cfg...

cargo-test-sbf (governance/addin-mock/program, governance/program):
error[E0658]: use of unstable library feature 'once_cell'
   --> src/abi_example.rs:559:36
     |
 559 | impl<T: AbiExample> AbiExample for std::sync::OnceLock<T> {
     |                                    ^^^^^^^^^^^^^^^^^^^^^^
     |
     = note: see issue #74465 <rust-lang/rust#74465> for more information
     = help: add `#![feature(once_cell)]` to the crate attributes to enable
  • Loading branch information
ryoqun authored and tao-stones committed Oct 6, 2023
1 parent c67fe25 commit 58844a5
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 24 deletions.
7 changes: 7 additions & 0 deletions frozen-abi/src/abi_example.rs
Original file line number Diff line number Diff line change
Expand Up @@ -555,3 +555,10 @@ impl<O: AbiEnumVisitor, E: AbiEnumVisitor> AbiEnumVisitor for Result<O, E> {
digester.create_child()
}
}

#[cfg(not(target_os = "solana"))]
impl<T: AbiExample> AbiExample for std::sync::OnceLock<T> {
fn example() -> Self {
Self::from(T::example())
}
}
26 changes: 2 additions & 24 deletions vote/src/vote_account.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
#[cfg(RUSTC_WITH_SPECIALIZATION)]
use solana_frozen_abi::abi_example::AbiExample;
use {
itertools::Itertools,
serde::ser::{Serialize, Serializer},
Expand Down Expand Up @@ -30,15 +28,15 @@ pub enum Error {
InvalidOwner(/*owner:*/ Pubkey),
}

#[derive(Debug)]
#[derive(Debug, AbiExample)]
struct VoteAccountInner {
account: AccountSharedData,
vote_state: OnceLock<Result<VoteState, Error>>,
}

pub type VoteAccountsHashMap = HashMap<Pubkey, (/*stake:*/ u64, VoteAccount)>;

#[derive(Clone, Debug, Deserialize)]
#[derive(Clone, Debug, Deserialize, AbiExample)]
#[serde(from = "Arc<VoteAccountsHashMap>")]
pub struct VoteAccounts {
vote_accounts: Arc<VoteAccountsHashMap>,
Expand Down Expand Up @@ -321,26 +319,6 @@ impl Serialize for VoteAccounts {
}
}

#[cfg(RUSTC_WITH_SPECIALIZATION)]
impl AbiExample for VoteAccountInner {
fn example() -> Self {
Self {
account: AccountSharedData::example(),
vote_state: OnceLock::from(Result::<VoteState, Error>::example()),
}
}
}

#[cfg(RUSTC_WITH_SPECIALIZATION)]
impl AbiExample for VoteAccounts {
fn example() -> Self {
Self {
vote_accounts: Arc::<VoteAccountsHashMap>::example(),
staked_nodes: OnceLock::from(Arc::<HashMap<Pubkey, u64>>::example()),
}
}
}

#[cfg(test)]
mod tests {
use {
Expand Down

0 comments on commit 58844a5

Please sign in to comment.