#[derive(Debug, Clone, Copy)]
pub enum Purity {
Pure,
View,
Write,
Payable,
}
impl Purity {
pub const fn allow_override(&self, other: Purity) -> bool {
use Purity::*;
matches!(
(*self, other),
(Payable, Payable)
| (Write, Write)
| (Write, View)
| (Write, Pure)
| (View, View)
| (View, Pure)
| (Pure, Pure)
)
}
}
#[cfg(test)]
mod tests {
#[test]
fn test_allow_override() {
use super::Purity::*;
assert!(Payable.allow_override(Payable));
assert!(!Payable.allow_override(Write));
assert!(!Payable.allow_override(View));
assert!(!Payable.allow_override(Pure));
assert!(!Write.allow_override(Payable));
assert!(Write.allow_override(Write));
assert!(Write.allow_override(View));
assert!(Write.allow_override(Pure));
assert!(!View.allow_override(Payable));
assert!(!View.allow_override(Write));
assert!(View.allow_override(View));
assert!(View.allow_override(Pure));
assert!(!Pure.allow_override(Payable));
assert!(!Pure.allow_override(Write));
assert!(!Pure.allow_override(View));
assert!(Pure.allow_override(Pure));
}
}