datasources 0.1.57

Async datasource interfaces, middleware, registry, and test doubles
Documentation
#[macro_export]
macro_rules! export_driver {
    ($symbol:ident, $ty:path) => {
        #[::ctor::ctor]
        fn register_linked_driver() {
            let module = stringify!($symbol);
            let Some(name) = $crate::ProviderCatalog::default()
                .iter()
                .find(|(_, catalog)| catalog.module == module)
                .map(|(name, _)| name.clone())
            else {
                return;
            };
            $crate::register(
                name,
                ::std::sync::Arc::new($ty) as ::std::sync::Arc<dyn $crate::Driver>,
            );
        }
    };
}