iqps_backend/db/
models.rs1use duplicate::duplicate_item;
2use sqlx::{postgres::PgTypeInfo, Postgres};
3
4use crate::qp::{Exam, Semester};
5
6impl sqlx::Type<Postgres> for Exam {
9 fn type_info() -> <Postgres as sqlx::Database>::TypeInfo {
10 <String as sqlx::Type<Postgres>>::type_info()
11 }
12}
13
14impl sqlx::Type<Postgres> for Semester {
15 fn type_info() -> <Postgres as sqlx::Database>::TypeInfo {
16 PgTypeInfo::with_name("VARCHAR")
19 }
20}
21
22#[duplicate_item(
23 DBEncodeDecode;
24 [ Exam ];
25 [ Semester ];
26)]
27impl sqlx::Decode<'_, sqlx::Postgres> for DBEncodeDecode {
28 fn decode(
29 value: <sqlx::Postgres as sqlx::Database>::ValueRef<'_>,
30 ) -> Result<Self, sqlx::error::BoxDynError> {
31 Ok(Self::try_from(value.as_str()?)?)
32 }
33}
34
35impl<'q> sqlx::Encode<'q, Postgres> for Exam {
36 fn encode_by_ref(
37 &self,
38 buf: &mut <Postgres as sqlx::Database>::ArgumentBuffer<'q>,
39 ) -> Result<sqlx::encode::IsNull, sqlx::error::BoxDynError> {
40 <String as sqlx::Encode<'q, Postgres>>::encode_by_ref(&String::from(self), buf)
41 }
42}