#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[non_exhaustive]
pub enum RKeyFunction {
KeyExact,
KeyOrNext,
KeyOrPrev,
AfterKey,
BeforeKey,
Prefix,
PrefixLast,
PrefixLastOrPrev,
MbrContain,
MbrIntersect,
MbrWithin,
MbrDisjoint,
MbrEqual,
NearestNeighbor,
Invalid,
}
impl RKeyFunction {
pub(crate) fn from_raw(raw: i32) -> Self {
match raw {
0 => Self::KeyExact,
1 => Self::KeyOrNext,
2 => Self::KeyOrPrev,
3 => Self::AfterKey,
4 => Self::BeforeKey,
5 => Self::Prefix,
6 => Self::PrefixLast,
7 => Self::PrefixLastOrPrev,
8 => Self::MbrContain,
9 => Self::MbrIntersect,
10 => Self::MbrWithin,
11 => Self::MbrDisjoint,
12 => Self::MbrEqual,
13 => Self::NearestNeighbor,
_ => Self::Invalid,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn maps_known_codes() {
assert_eq!(RKeyFunction::from_raw(0), RKeyFunction::KeyExact);
assert_eq!(RKeyFunction::from_raw(7), RKeyFunction::PrefixLastOrPrev);
assert_eq!(RKeyFunction::from_raw(13), RKeyFunction::NearestNeighbor);
}
#[test]
fn unknown_codes_become_invalid() {
assert_eq!(RKeyFunction::from_raw(-1), RKeyFunction::Invalid);
assert_eq!(RKeyFunction::from_raw(14), RKeyFunction::Invalid);
assert_eq!(RKeyFunction::from_raw(i32::MAX), RKeyFunction::Invalid);
}
}