xxai_tokio_postgres/
to_statement.rs1use crate::to_statement::private::{Sealed, ToStatementType};
2use crate::Statement;
3
4pub(crate) mod private {
5 use crate::{Client, Error, Statement};
6
7 pub trait Sealed {}
8
9 pub enum ToStatementType<'a> {
11 Statement(&'a Statement),
13 Query(&'a str),
15 }
16
17 impl<'a> ToStatementType<'a> {
18 pub async fn into_statement(self, client: &Client) -> Result<Statement, Error> {
20 match self {
21 ToStatementType::Statement(s) => Ok(s.clone()),
22 ToStatementType::Query(s) => client.prepare(s).await,
23 }
24 }
25 }
26}
27
28pub trait ToStatement {
35 fn __convert(&self) -> ToStatementType<'_>;
37}
38
39impl ToStatement for Statement {
40 fn __convert(&self) -> ToStatementType<'_> {
41 ToStatementType::Statement(self)
42 }
43}
44
45impl Sealed for Statement {}
46
47impl<T: AsRef<str>> ToStatement for T {
48 fn __convert(&self) -> ToStatementType<'_> {
49 ToStatementType::Query(self.as_ref())
50 }
51}
52
53impl Sealed for str {}
54
55impl Sealed for String {}