1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
use std::io::Write; use pg::Pg; use serialize::{self, Output}; /// Helper trait for writing tuples as named composite types /// /// This trait is essentially `ToSql<Record<ST>>` for tuples. /// While we can provide a valid body of `to_sql`, /// PostgreSQL doesn't allow the use of bind parameters for unnamed composite types. /// For this reason, we avoid implementing `ToSql` directly. /// /// This trait can be used by `ToSql` impls of named composite types. /// /// # Example /// /// ```no_run /// # #[macro_use] /// # extern crate diesel; /// # /// # #[cfg(feature = "postgres")] /// # mod the_impl { /// # use diesel::pg::Pg; /// # use diesel::serialize::{self, ToSql, Output, WriteTuple}; /// # use diesel::sql_types::{Integer, Text}; /// # use std::io::Write; /// # /// #[derive(SqlType)] /// #[postgres(type_name = "my_type")] /// struct MyType; /// /// #[derive(Debug)] /// struct MyStruct<'a>(i32, &'a str); /// /// impl<'a> ToSql<MyType, Pg> for MyStruct<'a> { /// fn to_sql<W: Write>(&self, out: &mut Output<W, Pg>) -> serialize::Result { /// WriteTuple::<(Integer, Text)>::write_tuple( /// &(self.0, self.1), /// out, /// ) /// } /// } /// # } /// # fn main() {} /// ``` pub trait WriteTuple<ST> { /// See trait documentation. fn write_tuple<W: Write>(&self, out: &mut Output<W, Pg>) -> serialize::Result; }