reflected 0.30.0

Something like reflection
Documentation
use crate::Field;

pub trait Reflected: Send + Default + 'static {
    fn type_name() -> &'static str;

    fn fields() -> &'static [Field<Self>];

    fn get_value(&self, field: Field<Self>) -> String;
    fn set_value(&mut self, field: Field<Self>, value: Option<&str>);

    #[cfg(feature = "sqlx_bind")]
    fn bind_to_sqlx_query<'q, O>(
        self,
        query: sqlx::query::QueryAs<'q, sqlx::Postgres, O, <sqlx::Postgres as sqlx::Database>::Arguments<'q>>,
    ) -> sqlx::query::QueryAs<'q, sqlx::Postgres, O, <sqlx::Postgres as sqlx::Database>::Arguments<'q>>;

    fn field_by_name(name: &str) -> Field<Self> {
        *Self::fields().iter().find(|a| a.name == name).unwrap_or_else(|| {
            panic!(
                "Failed to get field_by_name of {}. Field name: {name}",
                Self::type_name(),
            )
        })
    }

    fn value_by_name(&self, name: &str) -> String {
        self.get_value(Self::field_by_name(name))
    }
}