qraft-core 0.1.2

Core type system, query model, decoding, and SQL lowering primitives for qraft.
Documentation
//! Numeric literal expressions.

use std::marker::PhantomData;

use crate::{Numeric, TypeMeta, expression::Expression, lower::LowerCtx};

/// A numeric literal emitted directly into SQL.
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)
    }
}

/// Builds a numeric literal expression.
pub fn lit<T: Numeric>(value: impl Into<i64>) -> LitNumber<T> {
    LitNumber::new(value.into())
}