pub trait AsyncClientCodeGenerator { /// Create a token stream for usage of `client` to prepare `statement_str` for /// later execution, evaluating to a value of type /// `Result` /// /// - `client` is an expr of type `&Client` /// - `statement_str` is an expr of type `&str` fn generate_prepare_statement( client: &syn::Expr, statement_str: &syn::Expr, ) -> proc_macro2::TokenStream; /// Create a token stream for usage of `client` to execute the `prepared_statement` /// with the provided `parameters`, evaluating to a value of type /// `Result`. /// /// - `client` is an expr of type `&Client` /// - `prepared_statement` is an expr of type `&Client::PreparedStatement` /// - exprs in `parameters` are references of types that can be assumed to be compatible with the client fn generate_query_many_with_statement( client: &syn::Expr, prepared_statement: &syn::Expr, parameters: &[&syn::Expr], ) -> proc_macro2::TokenStream; /// Create a token stream for usage of `client` to execute the `prepared_statement` /// with the provided `parameters`, evaluating to a value of type /// `Result, Client::QueryError>`. /// /// - `client` is an expr of type `&Client` /// - `prepared_statement` is an expr of type `&Client::PreparedStatement` /// - exprs in `parameters` are references of types that can be assumed to be compatible with the client fn generate_query_one_or_none_with_statement( client: &syn::Expr, prepared_statement: &syn::Expr, parameters: &[&syn::Expr], ) -> proc_macro2::TokenStream; /// Create a token stream for usage of `row` to read a column, evaluating to a value of type /// `Result` where `T` is any type compatible with the database client. /// /// - `row` is an expr of type `&Client::Row` /// - `column_name` is an expr of type `&str` fn generate_row_read_column( row: &syn::Expr, column_name: &syn::Expr, ) -> proc_macro2::TokenStream; /// Create a token stream for usage of `client` to execute the `prepared_statement` /// with the provided `parameters`, evaluating to a value of type /// `Result`. /// /// - `client` is an expr of type `&Client` /// - `prepared_statement` is an expr of type `&Client::PreparedStatement` /// - exprs in `parameters` are references of types that can be assumed to be compatible with the client fn generate_insert_with_statement( client: &syn::Expr, prepared_statement: &syn::Expr, parameters: &[&syn::Expr], ) -> proc_macro2::TokenStream; /// Create a token stream for usage of `client` to execute the `prepared_statement` /// with the provided `parameters`, evaluating to a value of type /// `Result`. /// /// - `client` is an expr of type `&Client` /// - `prepared_statement` is an expr of type `&Client::PreparedStatement` /// - exprs in `parameters` are references of types that can be assumed to be compatible with the client fn generate_update_with_statement( client: &syn::Expr, prepared_statement: &syn::Expr, parameters: &[&syn::Expr], ) -> proc_macro2::TokenStream; /// Create a token stream for usage of `client` to execute the `prepared_statement` /// with the provided `parameters`, evaluating to a value of type /// `Result`. /// /// - `client` is an expr of type `&Client` /// - `prepared_statement` is an expr of type `&Client::PreparedStatement` /// - exprs in `parameters` are references of types that can be assumed to be compatible with the client fn generate_delete_with_statement( client: &syn::Expr, prepared_statement: &syn::Expr, parameters: &[&syn::Expr], ) -> proc_macro2::TokenStream; } #[cfg(feature = "tokio-postgres")] impl AsyncClientCodeGenerator for super::type_gen::TokioPostgresGenerator { fn generate_prepare_statement( client: &syn::Expr, statement_str: &syn::Expr, ) -> proc_macro2::TokenStream { quote::quote!(#client.prepare(#statement_str).await) } fn generate_query_many_with_statement( client: &syn::Expr, prepared_statement: &syn::Expr, parameters: &[&syn::Expr], ) -> proc_macro2::TokenStream { quote::quote!(#client.query(#prepared_statement, &[#(#parameters,)*]).await) } fn generate_query_one_or_none_with_statement( client: &syn::Expr, prepared_statement: &syn::Expr, parameters: &[&syn::Expr], ) -> proc_macro2::TokenStream { quote::quote!(#client.query_opt(#prepared_statement, &[#(#parameters,)*]).await) } fn generate_row_read_column( row: &syn::Expr, column_name: &syn::Expr, ) -> proc_macro2::TokenStream { quote::quote!(#row.try_get(#column_name)) } fn generate_insert_with_statement( client: &syn::Expr, prepared_statement: &syn::Expr, parameters: &[&syn::Expr], ) -> proc_macro2::TokenStream { Self::generate_execute(client, prepared_statement, parameters) } fn generate_update_with_statement( client: &syn::Expr, prepared_statement: &syn::Expr, parameters: &[&syn::Expr], ) -> proc_macro2::TokenStream { Self::generate_execute(client, prepared_statement, parameters) } fn generate_delete_with_statement( client: &syn::Expr, prepared_statement: &syn::Expr, parameters: &[&syn::Expr], ) -> proc_macro2::TokenStream { Self::generate_execute(client, prepared_statement, parameters) } }