use std::ops::Deref;
use solana_sdk::signer::keypair::Keypair;
use super::parsing::KeypairArg;
#[allow(clippy::large_enum_variant)]
pub enum MaybeKeypair<'a> {
Owned(Keypair),
Borrowed(&'a Keypair),
}
impl Deref for MaybeKeypair<'_> {
type Target = Keypair;
fn deref(&self) -> &Keypair {
match self {
MaybeKeypair::Owned(keypair) => keypair,
MaybeKeypair::Borrowed(keypair) => keypair,
}
}
}
pub fn read_keypair_or(
arg: Option<KeypairArg>,
default: &Keypair,
) -> anyhow::Result<MaybeKeypair<'_>> {
match arg {
Some(arg) => arg.signer().map(MaybeKeypair::Owned),
None => Ok(MaybeKeypair::Borrowed(default)),
}
}