rusqlite+serde_ruslite легко решают все, что надо с автомапингами, при этом по дороге бесплатно есть сериализация и обратно если надо, куда угодно, не только с базой. Красота. Кажется.
Top-level
rusqlite+serde_ruslite легко решают все, что надо с автомапингами, при этом по дороге бесплатно есть сериализация и обратно если надо, куда угодно, не только с базой. Красота. Кажется. 5 comments
Но serde сериализация и обратно и так для почти всех типов есть или ее можно легко сделать. Я десериализатор написал только что бы оперток не плодить Единственное, что меня пока тормозит это волшебные преобразования типов, когда через два дереф был найден и вызван метод. Или когда тип ошибки надо один в другой преобразовать и хз как быстро это сделать без километра кода. С эти еще бывают затыки где долго ищу "простое решение". Теперь надо кэширование стейтментов наладить, там методы капец неудобные как раз в связи с конвертацией ошибок. |
Так и есть, diesel только порождает кучу дурной работы.
pub fn get_user(username: &str) -> Result<UserDb> {
DB_POOL.get_connection()?.query_row_and_then(
sql_fabric::get_user_sql(),
named_params! {":username":username},
|row| -> Result<UserDb> { from_row::<UserDb>(row).context("Get user info error") },
)
}
А вот так выглядит весь маппинг. Именнованные параметры есть, а выход мапится автоматом по совпадению имен...правда я еще не проверил работает ли :)
Так и есть, diesel только порождает кучу дурной работы.
pub fn get_user(username: &str) -> Result<UserDb> {
DB_POOL.get_connection()?.query_row_and_then(
sql_fabric::get_user_sql(),
named_params! {":username":username},
|row| -> Result<UserDb> { from_row::<UserDb>(row).context("Get user info error") },
)
}