zero_postgres/
statement.rs1use crate::state::extended::PreparedStatement;
4
5pub trait IntoStatement: private::Sealed {
9 fn needs_parse(&self) -> bool;
11
12 fn as_sql(&self) -> Option<&str>;
14
15 fn as_prepared(&self) -> Option<&PreparedStatement>;
17}
18
19mod private {
20 use crate::state::extended::PreparedStatement;
21
22 pub trait Sealed {}
23
24 impl Sealed for PreparedStatement {}
25 impl Sealed for &PreparedStatement {}
26 impl Sealed for str {}
27 impl Sealed for &str {}
28 impl Sealed for &&str {}
29}
30
31impl IntoStatement for &PreparedStatement {
32 fn needs_parse(&self) -> bool {
33 false
34 }
35
36 fn as_sql(&self) -> Option<&str> {
37 None
38 }
39
40 fn as_prepared(&self) -> Option<&PreparedStatement> {
41 Some(self)
42 }
43}
44
45impl IntoStatement for &str {
46 fn needs_parse(&self) -> bool {
47 true
48 }
49
50 fn as_sql(&self) -> Option<&str> {
51 Some(self)
52 }
53
54 fn as_prepared(&self) -> Option<&PreparedStatement> {
55 None
56 }
57}
58
59impl IntoStatement for &&str {
60 fn needs_parse(&self) -> bool {
61 true
62 }
63
64 fn as_sql(&self) -> Option<&str> {
65 Some(self)
66 }
67
68 fn as_prepared(&self) -> Option<&PreparedStatement> {
69 None
70 }
71}
72
73impl IntoStatement for str {
74 fn needs_parse(&self) -> bool {
75 true
76 }
77
78 fn as_sql(&self) -> Option<&str> {
79 Some(self)
80 }
81
82 fn as_prepared(&self) -> Option<&PreparedStatement> {
83 None
84 }
85}
86
87impl IntoStatement for PreparedStatement {
88 fn needs_parse(&self) -> bool {
89 false
90 }
91
92 fn as_sql(&self) -> Option<&str> {
93 None
94 }
95
96 fn as_prepared(&self) -> Option<&PreparedStatement> {
97 Some(self)
98 }
99}