use crate::LocalKeystore;
use sc_keystore::Result;
use sp_application_crypto::{AppPair, AppPublic};
pub trait KeystoreExt {
fn generate<Pair: AppPair>(&self) -> Result<Pair>;
fn public_keys<Public: AppPublic>(&self) -> Result<Vec<Public>>;
}
impl KeystoreExt for LocalKeystore {
fn generate<Pair: AppPair>(&self) -> Result<Pair> {
self.0.write().generate_by_type::<Pair::Generic>(Pair::ID).map(Into::into)
}
fn public_keys<Public: AppPublic>(&self) -> Result<Vec<Public>> {
self.0
.read()
.raw_public_keys(Public::ID)
.map(|v| v.into_iter().filter_map(|k| Public::from_slice(k.as_slice()).ok()).collect())
}
}
#[cfg(test)]
mod tests {
use crate::{KeystoreExt, LocalKeystore};
use sp_application_crypto::sr25519::AppPair;
use sp_core::Pair;
#[test]
fn test_execute_generate_doesnt_fail() {
let store = LocalKeystore::in_memory();
let generated_key = store.generate::<AppPair>();
assert_ne!("", format!("{:?}", generated_key.unwrap().to_raw_vec()));
}
}