стадии компиляции? struct Something(i32);
//мб нужно будет вынести в отдельную либу чтобы использовать в коде и макросе если будет что-то сложнее проверки на отрицательное значение?
impl TryFrom<i32> for Something {
type Error = &'static str;
fn try_from(value: i32) -> Result<Self, Self::Error> {
if value <= 0 {
Err("Something only accepts values greater than zero!")
} else {
Ok(Self(value))
}
}
}
fn main {
let something_one = Something::try_from(-1).unwrap();//runtime error
let something_two = something_try_from_compile_time!(-1);//compile time error
}
// quote!{ Something::try_from(-1).unwrap() }
Если бы в const контексте можно было юзать if-чик, то можно было бы попробовать вариант с const конструктором, который вызывает ошибку компиляции
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=0b2dd59cff6d54be5e51cfc398e0046e
let _ = cond && panic!("only if !cond");
какой-то грязный хак
Обсуждают сегодня