Так-то лучше. Макросы рулят и педалят.
Композиция кстати тоже. Можно вот так просто взять и реализовать нужные методы для структуры из какой-нибудь библиотеки. При этом видимы они будут только при условии, что типаж был заимпортирован, в отличии от каких нибудь рубей, где это работает через жопу своего рода обезьяний патчинг, из-за чего потом велика вероятность, что придётся искать, какой же мудак добавил какой-то метод в некоторый тип (стандартной) библиотеки и теперь всё сломалось.
extern crate postgres;
use postgres::rows::Rows;
use postgres::types::FromSql;
trait FetchColumn {
fn fetch_column<T: FromSql>(&self) -> T;
}
impl <'a> FetchColumn for Rows<'a> {
fn fetch_column<T: FromSql>(&self) -> T {
self.iter().next().map(|row| row.get(0)).unwrap()
}
}