ruststream_sqlx/inbox/broker/
describe.rs1use ruststream::{DescribeServer, ServerSpec};
5use ruststream_sqlx_dialect::Dialect;
6#[cfg(feature = "any")]
7use sqlx::Any;
8#[cfg(feature = "mysql")]
9use sqlx::MySql;
10#[cfg(feature = "postgres")]
11use sqlx::Postgres;
12#[cfg(feature = "sqlite")]
13use sqlx::Sqlite;
14
15use super::SqlxBroker;
16
17#[cfg(feature = "postgres")]
18impl<D: Dialect + 'static> DescribeServer for SqlxBroker<Postgres, D> {
19 fn describe_server(&self) -> ServerSpec {
20 ServerSpec::from_url(&self.pool.url(), "postgres")
21 }
22}
23
24#[cfg(feature = "mysql")]
25impl<D: Dialect + 'static> DescribeServer for SqlxBroker<MySql, D> {
26 fn describe_server(&self) -> ServerSpec {
27 ServerSpec::from_url(&self.pool.url(), "mysql")
28 }
29}
30
31#[cfg(feature = "sqlite")]
35impl<D: Dialect + 'static> DescribeServer for SqlxBroker<Sqlite, D> {
36 fn describe_server(&self) -> ServerSpec {
37 ServerSpec::in_process("sqlite")
44 }
45}
46
47#[cfg(feature = "any")]
50impl<D: Dialect + 'static> DescribeServer for SqlxBroker<Any, D> {
51 fn describe_server(&self) -> ServerSpec {
52 let url = self.pool.url();
54 let scheme = url.split_once(':').map_or(&*url, |(scheme, _)| scheme);
55 match scheme {
56 "sqlite" => ServerSpec::in_process("sqlite"),
57 "postgres" | "postgresql" => ServerSpec::from_url(&url, "postgres"),
58 "mysql" | "mariadb" => ServerSpec::from_url(&url, "mysql"),
59 scheme => ServerSpec::from_url(&url, scheme),
60 }
61 }
62}