use crate::error::Error;
const HARDENED_KEY_START_INDEX: u32 = 2_147_483_648;
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
pub enum KeyIndex {
Normal(u32),
Hardened(u32),
}
impl KeyIndex {
pub fn raw_index(self) -> u32 {
match self {
KeyIndex::Normal(i) => i,
KeyIndex::Hardened(i) => i,
}
}
pub fn normalize_index(self) -> u32 {
match self {
KeyIndex::Normal(i) => i,
KeyIndex::Hardened(i) => i - HARDENED_KEY_START_INDEX,
}
}
pub fn is_valid(self) -> bool {
match self {
KeyIndex::Normal(i) => i < HARDENED_KEY_START_INDEX,
KeyIndex::Hardened(i) => i >= HARDENED_KEY_START_INDEX,
}
}
pub fn hardened_from_normalize_index(i: u32) -> Result<KeyIndex, Error> {
if i < HARDENED_KEY_START_INDEX {
Ok(KeyIndex::Hardened(HARDENED_KEY_START_INDEX + i))
} else {
Ok(KeyIndex::Hardened(i))
}
}
pub fn from_index(i: u32) -> Result<Self, Error> {
if i < HARDENED_KEY_START_INDEX {
Ok(KeyIndex::Normal(i))
} else {
Ok(KeyIndex::Hardened(i))
}
}
}
impl From<u32> for KeyIndex {
fn from(index: u32) -> Self {
KeyIndex::from_index(index).expect("KeyIndex")
}
}