reflected/
reflected.rs

1use crate::Field;
2
3pub trait Reflected: Send + Default + 'static {
4    fn type_name() -> &'static str;
5
6    fn fields() -> &'static [Field<Self>];
7
8    fn get_value(&self, field: Field<Self>) -> String;
9    fn set_value(&mut self, field: Field<Self>, value: Option<&str>);
10
11    #[cfg(feature = "sqlx_bind")]
12    fn bind_to_sqlx_query<'q, O>(
13        self,
14        query: sqlx::query::QueryAs<'q, sqlx::Postgres, O, <sqlx::Postgres as sqlx::Database>::Arguments<'q>>,
15    ) -> sqlx::query::QueryAs<'q, sqlx::Postgres, O, <sqlx::Postgres as sqlx::Database>::Arguments<'q>>;
16
17    fn field_by_name(name: &str) -> Field<Self> {
18        *Self::fields().iter().find(|a| a.name == name).unwrap_or_else(|| {
19            panic!(
20                "Failed to get field_by_name of {}. Field name: {name}",
21                Self::type_name(),
22            )
23        })
24    }
25
26    fn value_by_name(&self, name: &str) -> String {
27        self.get_value(Self::field_by_name(name))
28    }
29}