I am trying to deserialize a struct of external crate with #[serde(with = "")]
use chrono::{DateTime, NaiveDateTime, Utc};
use ormx::Table;
use serde::ser::{SerializeStruct, Serializer};
use serde::{Deserialize, Serialize};
use sqlx::postgres::types::PgRange;
use sqlx::{Pool, Postgres};
#[derive(Debug, Clone, Serialize, Table)]
#[ormx(table = "sessions", id = id, insertable, deletable)]
pub struct Session {
#[ormx(default)]
pub id: i32,
pub name: String,
#[serde(with = "crate::utils::pg_range")]
pub duration: PgRange<NaiveDateTime>,
}
And this is my serializer module:
use chrono::{NaiveDateTime};
use serde::ser::{SerializeStruct, Serializer};
use serde::{Deserialize, Serialize};
use sqlx::postgres::types::PgRange;
use serde::de::{Deserialize, Deserializer, Visitor, SeqAccess, MapAccess};
pub fn serialize<S>(range: &PgRange<NaiveDateTime>, s: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
let mut state = s.serialize_struct("PgRange", 2)?;
state.serialize_field("start", &range.start)?;
state.serialize_field("end", &range.end)?;
state.end()
}
pub fn deserialize<'de, D>(d: D) -> Result<PgRange<NaiveDateTime>, D::Error> where D: Deserializer<'de> {
Deserialize::deserialize(d)?
}
I am getting an error like this now, which I don't understand:
error[E0277]: the trait bound `<D as Deserializer<'de>>::Error: employees::_::_serde::Deserialize<'_>` is not satisfied
--> src/utils/pg_range.rs:18:5
|
18 | Deserialize::deserialize(d)?
| ^^^^^^^^^^^^^^^^^^^^^^^^ the trait `employees::_::_serde::Deserialize<'_>` is not implemented for `<D as Deserializer<'de>>::Error`
|
= note: required because of the requirements on the impl of `employees::_::_serde::Deserialize<'_>` for `Result<PgRange<NaiveDateTime>, <D as Deserializer<'de>>::Error>`
note: required by a bound in `employees::_::_serde::Deserialize::deserialize`
--> /home/hugosum/.cache/cargo/registry/src/github.com-1ecc6299db9ec823/serde-1.0.130/src/de/mod.rs:539:12
|
539 | D: Deserializer<'de>;
| ^^^^^^^^^^^^^^^^^ required by this bound in `employees::_::_serde::Deserialize::deserialize`
help: consider further restricting the associated type
|
17 | pub fn deserialize<'de, D>(d: D) -> Result<PgRange<NaiveDateTime>, D::Error> where D: Deserializer<'de>, <D as Deserializer<'de>>::Error: employees::_::_serde::Deserialize<'_> {
| ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
How should I fix this and deserialize correctly?