kosame_repr 0.3.0

Macro-based Rust ORM focused on developer ergonomics
Documentation
mod binary;
mod bind_param;
mod call;
mod cast;
mod column_ref;
mod lit;
mod paren;
mod raw;
mod unary;

pub use binary::*;
pub use bind_param::*;
pub use call::*;
pub use cast::*;
pub use column_ref::*;
pub use lit::*;
pub use paren::*;
pub use raw::*;
pub use unary::*;

pub enum Expr<'a> {
    Binary(Binary<'a>),
    BindParam(BindParam<'a>),
    Call(Call<'a>),
    Cast(Cast<'a>),
    ColumnRef(ColumnRef<'a>),
    Lit(Lit),
    Paren(Paren<'a>),
    Raw(Raw<'a>),
    Unary(Unary<'a>),
}

macro_rules! variants {
    ($macro:ident!()) => {
        $macro!(
            Binary
            BindParam
            Call
            Cast
            ColumnRef
            Lit
            Paren
            Raw
            Unary
        )
    };
}

impl kosame_sql::FmtSql for Expr<'_> {
    #[inline]
    fn fmt_sql<D: kosame_sql::Dialect>(
        &self,
        formatter: &mut kosame_sql::Formatter<D>,
    ) -> kosame_sql::Result {
        macro_rules! branches {
            ($($variant:ident)*) => {
                match self {
                    $(Self::$variant(inner) => inner.fmt_sql(formatter)),*
                }
            };
        }

        variants!(branches!())
    }
}