chuchi_postgres/row/
to.rs

1// macro internal
2#[doc(hidden)]
3pub use postgres_types::ToSql;
4
5pub trait ToRowStatic {
6	/// should return something like "id", "name", "email"
7	fn insert_columns() -> &'static str;
8	/// should return something like $1, $2, $3
9	fn insert_values() -> &'static str;
10	/// should return  something like "id" = $1, "name" = $2
11	fn update_columns() -> &'static str;
12
13	fn params_len() -> usize;
14	fn params(&self) -> impl ExactSizeIterator<Item = &(dyn ToSql + Sync)>;
15}
16
17pub trait ToRow {
18	/// should return something like "id", "name", "email"
19	fn insert_columns(&self, s: &mut String);
20	/// should return something like $1, $2, $3
21	fn insert_values(&self, s: &mut String);
22	/// should return  something like "id" = $1, "name" = $2
23	fn update_columns(&self, s: &mut String);
24
25	fn params_len(&self) -> usize;
26	fn params(&self) -> impl ExactSizeIterator<Item = &(dyn ToSql + Sync)>;
27}
28
29impl<S> ToRow for S
30where
31	S: ToRowStatic,
32{
33	fn insert_columns(&self, s: &mut String) {
34		s.push_str(S::insert_columns());
35	}
36
37	fn insert_values(&self, s: &mut String) {
38		s.push_str(S::insert_values());
39	}
40
41	fn update_columns(&self, s: &mut String) {
42		s.push_str(S::update_columns());
43	}
44
45	fn params_len(&self) -> usize {
46		S::params_len()
47	}
48
49	fn params(&self) -> impl ExactSizeIterator<Item = &(dyn ToSql + Sync)> {
50		S::params(self)
51	}
52}