kosame_macro 0.0.3

Macro-based Rust ORM focused on developer ergonomics
Documentation
use super::Visitor;
use proc_macro2::TokenStream;
use quote::{ToTokens, quote};
use syn::{
    Ident, Token,
    parse::{Parse, ParseStream},
};

pub struct BindParam {
    _colon: Token![:],
    name: Ident,
}

impl BindParam {
    pub fn name(&self) -> &Ident {
        &self.name
    }

    pub fn accept<'a>(&'a self, visitor: &mut impl Visitor<'a>) {
        visitor.visit_bind_param(self);
    }

    pub fn peek(input: ParseStream) -> bool {
        input.peek(Token![:])
    }
}

impl Parse for BindParam {
    fn parse(input: ParseStream) -> syn::Result<Self> {
        Ok(Self {
            _colon: input.parse()?,
            name: input.parse()?,
        })
    }
}

impl ToTokens for BindParam {
    fn to_tokens(&self, tokens: &mut TokenStream) {
        let name = &self.name;
        quote! {
            ::kosame::expr::BindParam::new(
                &scope::params::#name::BIND_PARAM,
            )
        }
        .to_tokens(tokens)
    }
}