This is a trait found in Diesel.
trait Identifiable {
type Id;
...
}
This is a User model with derived impl of Identifiable.
#[derive(Identifiable)]
pub struct User {
id: i32,
first_name: String,
last_name: String,
}
As per the docs, implementation of Identifiable is derived on the reference of the struct i.e. on &User.
This is a trait to find with id defined on the Identifiable. The implementation on a User would be as follows.
trait Find<'a>: Sized where
&'a Self: Identifiable,
Self: 'a,
{
fn find(id: <&'a Self as Identifiable>::Id) -> Result<Self, MyError>;
}
The impl of Find on a User.
impl<'a> Find<'a> for User {
fn find(id: i32) -> Result<User, MyError> {
let conn = ::establish_conn()?;
Ok(users::table.find(id).get_result(&conn)?)
}
}
The error on compilation:
fn find(id: i32) -> Result<Self> {
^^^ expected &i32, found i32
As I would like to find a user with an i32, the impl <&'a Self as Identifiable>::Id would refer to the id as &i32.
I only want id to be a value not a reference type.
How can I define the type of id on find to be a value type when Identifiable is applied for reference type &User?