pub(crate) mod builder;
pub(crate) mod driver;
use proc_macro2::TokenStream;
use crate::codegen::{BindingMode, MethodHandler, ServiceHandler};
pub(crate) struct ShapeParts<'a> {
pub(crate) method: &'a MethodHandler<'a>,
pub(crate) mode: BindingMode,
pub(crate) param_defs: Vec<TokenStream>,
pub(crate) client_call: TokenStream,
}
pub(crate) trait BindingBackend {
fn generate_service(&self, service: &ServiceHandler<'_>) -> crate::error::Result<String>;
fn main_module(&self, services: &[ServiceHandler<'_>]) -> crate::error::Result<String>;
fn param_defs(&self, method: &MethodHandler<'_>, mode: BindingMode) -> Vec<TokenStream>;
fn client_call(&self, method: &MethodHandler<'_>, mode: BindingMode) -> TokenStream;
fn emit_list(&self, parts: &ShapeParts<'_>) -> TokenStream;
fn emit_create(&self, parts: &ShapeParts<'_>) -> TokenStream;
fn emit_get_update(&self, parts: &ShapeParts<'_>) -> TokenStream;
fn emit_delete(&self, parts: &ShapeParts<'_>) -> TokenStream;
fn emit_resource_accessor(&self, service: &ServiceHandler<'_>) -> Option<TokenStream>;
}