use std::marker::PhantomData;
use crate::{Numeric, TypeMeta, expression::Expression, lower::LowerCtx};
pub struct LitNumber<T> {
value: i64,
marker: PhantomData<T>,
}
impl<T: Numeric> LitNumber<T> {
pub(crate) const fn new(rhs: i64) -> Self {
Self {
value: rhs,
marker: PhantomData,
}
}
}
#[qraft_expression_macro::as_expression]
impl<T: TypeMeta> Expression for LitNumber<T> {
type Type = T;
fn lower(&self, ctx: &mut LowerCtx) -> usize {
ctx.lower_lit_int(self.value)
}
}
pub fn lit<T: Numeric>(value: impl Into<i64>) -> LitNumber<T> {
LitNumber::new(value.into())
}