Skip to content

Commit 039219b

Browse files
committed
deserialize undefined to none
1 parent 5b2a791 commit 039219b

1 file changed

Lines changed: 20 additions & 1 deletion

File tree

lib/ain-ocean/src/api_query.rs

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@ use axum::{
33
extract::FromRequestParts,
44
http::{request::Parts, StatusCode},
55
};
6-
use serde::{de::DeserializeOwned, Deserialize};
6+
use serde::{
7+
de::{DeserializeOwned, Deserializer},
8+
Deserialize,
9+
};
710
use serde_with::{serde_as, DisplayFromStr};
811

912
use crate::error::ApiError;
@@ -18,9 +21,25 @@ pub struct PaginationQuery {
1821
#[serde_as(as = "DisplayFromStr")]
1922
#[serde(default = "default_pagination_size")]
2023
pub size: usize,
24+
#[serde(deserialize_with = "undefined_to_none")]
2125
pub next: Option<String>,
2226
}
2327

28+
fn undefined_to_none<'de, D>(d: D) -> Result<Option<String>, D::Error>
29+
where
30+
D: Deserializer<'de>,
31+
{
32+
let v: Option<String> = Deserialize::deserialize(d)?;
33+
match v {
34+
Some(v) => if v.as_str() == "undefined" {
35+
Ok(None)
36+
} else {
37+
Ok(Some(v))
38+
},
39+
None => Ok(None)
40+
}
41+
}
42+
2443
pub struct Query<T>(pub T);
2544

2645
#[async_trait]

0 commit comments

Comments
 (0)