use alloc::vec::Vec;
use codec::Encode;
use sp_runtime::traits::Convert;
use super::{shared, Config as HistoricalConfig};
use crate::{Config as SessionConfig, Pallet as SessionModule, SessionIndex};
pub fn store_session_validator_set_to_offchain<T: HistoricalConfig + SessionConfig>(
session_index: SessionIndex,
) {
let encoded_validator_list = <SessionModule<T>>::validators()
.into_iter()
.filter_map(|validator_id: <T as SessionConfig>::ValidatorId| {
let full_identification =
<<T as HistoricalConfig>::FullIdentificationOf>::convert(validator_id.clone());
full_identification.map(|full_identification| (validator_id, full_identification))
})
.collect::<Vec<_>>();
encoded_validator_list.using_encoded(|encoded_validator_list| {
let derived_key = shared::derive_key(shared::PREFIX, session_index);
sp_io::offchain_index::set(derived_key.as_slice(), encoded_validator_list);
});
}
pub fn store_current_session_validator_set_to_offchain<T: HistoricalConfig + SessionConfig>() {
store_session_validator_set_to_offchain::<T>(<SessionModule<T>>::current_index());
}