macro_rules! impl_sqlx_text {
($($T:ty),+ $(,)?) => {$(
impl sqlx::Type<sqlx::Postgres> for $T {
fn type_info() -> sqlx::postgres::PgTypeInfo {
<String as sqlx::Type<sqlx::Postgres>>::type_info()
}
}
impl<'q> sqlx::Encode<'q, sqlx::Postgres> for $T {
fn encode_by_ref(
&self,
buf: &mut <sqlx::Postgres as sqlx::Database>::ArgumentBuffer<'q>,
) -> Result<sqlx::encode::IsNull, sqlx::error::BoxDynError> {
let s: &str = self.as_ref();
<&str as sqlx::Encode<'q, sqlx::Postgres>>::encode_by_ref(&s, buf)
}
}
impl<'r> sqlx::Decode<'r, sqlx::Postgres> for $T {
fn decode(
value: <sqlx::Postgres as sqlx::Database>::ValueRef<'r>,
) -> Result<Self, sqlx::error::BoxDynError> {
let s = <String as sqlx::Decode<sqlx::Postgres>>::decode(value)?;
Self::try_from(s).map_err(|e| Box::new(e) as sqlx::error::BoxDynError)
}
}
)+};
}
use crate::identifiers::{EicCode, MaloId, MarktpartnerId, MeloId, NeloId, ObisCode, SrId, TrId};
impl_sqlx_text!(
MaloId,
MeloId,
NeloId,
SrId,
TrId,
EicCode,
MarktpartnerId,
ObisCode
);