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 = <&str as sqlx::Decode<sqlx::Postgres>>::decode(value)?;
Self::try_from(s).map_err(|e| Box::new(e) as sqlx::error::BoxDynError)
}
}
impl sqlx::postgres::PgHasArrayType for $T {
fn array_type_info() -> sqlx::postgres::PgTypeInfo {
<String as sqlx::postgres::PgHasArrayType>::array_type_info()
}
}
)+};
}
use crate::identifiers::{
AkivId, Bic, BilanzierungsgebietId, BilanzkreisId, CrId, EicCode, Iban,
LokationsbuendelObjektcode, Lokationsbuendelcode, MaloId, MarktpartnerId, MeloId, NebeId,
NeloId, ObisCode, PaketId, SgId, SrId, TrId, TranchennummerId, Zaehlpunktbezeichnung,
};
impl_sqlx_text!(
AkivId,
Bic,
BilanzierungsgebietId,
BilanzkreisId,
CrId,
EicCode,
Iban,
Lokationsbuendelcode,
LokationsbuendelObjektcode,
MaloId,
MarktpartnerId,
MeloId,
NebeId,
NeloId,
ObisCode,
PaketId,
SgId,
SrId,
TrId,
TranchennummerId,
Zaehlpunktbezeichnung,
);