crate::ix!();
pub struct CheckVarIntMode<const Mode: VarIntMode> {
}
use num_traits::{Signed, Unsigned};
pub trait ModeConstraint<const M: VarIntMode, I> {}
impl<I: Unsigned> ModeConstraint<{ VarIntMode::Default }, I> for () {}
impl<I: Signed> ModeConstraint<{ VarIntMode::NonNegativeSigned }, I> for () {}
impl<const Mode: VarIntMode> CheckVarIntMode<Mode> {
#[inline]
pub fn new<I>() -> Self
where
(): ModeConstraint<Mode, I>,
{
trace!("CheckVarIntMode<Mode={:?}, I={}>", Mode, std::any::type_name::<I>());
Self {}
}
}
#[cfg(test)]
mod check_var_int_mode_tests {
use super::*;
#[traced_test]
fn default_mode_accepts_unsigned() {
let _marker = CheckVarIntMode::<{ VarIntMode::Default }>::new::<u32>();
}
#[traced_test]
fn legacy_mode_accepts_signed() {
let _marker = CheckVarIntMode::<{ VarIntMode::NonNegativeSigned }>::new::<i64>();
}
}