36 lines
915 B
Rust
36 lines
915 B
Rust
![]() |
use solana_sdk::pubkey::Pubkey;
|
||
|
use std::ops::Index;
|
||
|
|
||
|
/// Round-robin leader schedule.
|
||
|
pub struct LeaderSchedule {
|
||
|
slot_leaders: Vec<Pubkey>,
|
||
|
}
|
||
|
|
||
|
impl LeaderSchedule {
|
||
|
pub fn new(slot_leaders: Vec<Pubkey>) -> Self {
|
||
|
Self { slot_leaders }
|
||
|
}
|
||
|
}
|
||
|
|
||
|
impl Index<usize> for LeaderSchedule {
|
||
|
type Output = Pubkey;
|
||
|
fn index(&self, index: usize) -> &Pubkey {
|
||
|
&self.slot_leaders[index % self.slot_leaders.len()]
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#[cfg(test)]
|
||
|
mod tests {
|
||
|
use super::*;
|
||
|
use solana_sdk::signature::{Keypair, KeypairUtil};
|
||
|
#[test]
|
||
|
fn test_leader_schedule_index() {
|
||
|
let pubkey0 = Keypair::new().pubkey();
|
||
|
let pubkey1 = Keypair::new().pubkey();
|
||
|
let leader_schedule = LeaderSchedule::new(vec![pubkey0, pubkey1]);
|
||
|
assert_eq!(leader_schedule[0], pubkey0);
|
||
|
assert_eq!(leader_schedule[1], pubkey1);
|
||
|
assert_eq!(leader_schedule[2], pubkey0);
|
||
|
}
|
||
|
}
|