1use crate::command::Command;
2use crate::connection::Connection;
3use crate::converters::{Mapping, TypeConverter};
4use crate::information::Information;
5use crate::isolation_level::IsolationLevel;
6use crate::statements::StatementTextRenderer;
7use crate::transaction::Transaction;
8use crate::value::Value;
9use std::collections::HashMap;
10use std::sync::Arc;
11
12pub trait Driver: Send + Sync {
13 fn connection(&self, options: Option<&HashMap<String, String>>) -> Arc<dyn Connection>;
14 fn command(&self, connection: Arc<dyn Connection>) -> Arc<dyn Command>;
15 fn transaction(
16 &self,
17 connection: Arc<dyn Connection>,
18 isolation: IsolationLevel,
19 ) -> Arc<dyn Transaction>;
20 fn row_type_converters(
21 &self,
22 ) -> HashMap<String, Box<dyn TypeConverter<Value, Value> + Send + Sync>>;
23
24 fn column_type(&self, name: &str) -> crate::Result<String> {
25 Ok(name.to_string())
26 }
27
28 fn type_converter(&self) -> Option<&dyn Mapping<String, String>> {
29 None
30 }
31
32 fn statement_renderer(&self) -> Option<&StatementTextRenderer> {
33 None
34 }
35
36 fn information(&self) -> Option<&Information> {
37 None
38 }
39}