File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff 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+ } ;
710use serde_with:: { serde_as, DisplayFromStr } ;
811
912use 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+
2443pub struct Query < T > ( pub T ) ;
2544
2645#[ async_trait]
You can’t perform that action at this time.
0 commit comments