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