Skip to content

Commit

Permalink
Specify type of diesel::row::NamedRow::get in QueryableByName macro.
Browse files Browse the repository at this point in the history
This has the signature
```
fn get<ST, T>(&self, column_name: &str) -> Result<T>
where
    T: FromSql<ST, DB>
```

This can be inferred from the resulting value, if there is only one
`ST` type in scope for `FromSql<ST, DB>`.

But if multiple types are in scope, e.g. 
```
impl<__DB: diesel::backend::Backend> QueryableByName<__DB>
for StructWithTextAndCitext
where
    String: diesel::deserialize::FromSql<sql_types::Text, __DB>,
    String: diesel::deserialize::FromSql<sql_types::Citext, __DB>,
{
```

then `ST` cannot be inferred.
  • Loading branch information
fiadliel committed Jul 26, 2024
1 parent 5444b38 commit be82672
Showing 1 changed file with 2 additions and 1 deletion.
3 changes: 2 additions & 1 deletion diesel_derives/src/queryable_by_name.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,13 @@ pub fn derive(item: DeriveInput) -> Result<TokenStream> {
if f.embed() {
Ok(quote!(<#field_ty as QueryableByName<__DB>>::build(row)?))
} else {
let st = sql_type(&f, &model)?;
let deserialize_ty = f.ty_for_deserialize();
let name = f.column_name()?;
let name = LitStr::new(&name.to_string(), name.span());
Ok(quote!(
{
let field = diesel::row::NamedRow::get(row, #name)?;
let field = diesel::row::NamedRow::get::<#st, #deserialize_ty>(row, #name)?;
<#deserialize_ty as Into<#field_ty>>::into(field)
}
))
Expand Down

0 comments on commit be82672

Please sign in to comment.