es_entity/context/
sqlx.rs1use sqlx::postgres::{PgHasArrayType, PgValueRef};
2
3use crate::db;
4
5use super::ContextData;
6
7impl sqlx::Type<db::Db> for ContextData {
8 fn type_info() -> db::TypeInfo {
9 <serde_json::Value as sqlx::Type<db::Db>>::type_info()
10 }
11}
12
13impl<'q> sqlx::Encode<'q, db::Db> for ContextData {
14 fn encode_by_ref(
15 &self,
16 buf: &mut db::ArgumentBuffer,
17 ) -> Result<sqlx::encode::IsNull, Box<dyn std::error::Error + Send + Sync + 'static>> {
18 let json_value = serde_json::to_value(&self.0)?;
19 <serde_json::Value as sqlx::Encode<db::Db>>::encode_by_ref(&json_value, buf)
20 }
21}
22
23impl<'r> sqlx::Decode<'r, db::Db> for ContextData {
24 fn decode(
25 value: PgValueRef<'r>,
26 ) -> Result<Self, Box<dyn std::error::Error + 'static + Send + Sync>> {
27 let json_value = <serde_json::Value as sqlx::Decode<db::Db>>::decode(value)?;
28 let res: ContextData = serde_json::from_value(json_value)?;
29 Ok(res)
30 }
31}
32
33impl PgHasArrayType for ContextData {
34 fn array_type_info() -> db::TypeInfo {
35 <serde_json::Value as PgHasArrayType>::array_type_info()
36 }
37}