@@ -4,26 +4,43 @@ use crate::controllers::krate::CratePath;
4
4
use crate :: models:: { CrateName , User , Version , VersionOwnerAction } ;
5
5
use crate :: util:: errors:: AppResult ;
6
6
use crate :: views:: { EncodableDependency , EncodableVersion } ;
7
- use axum_extra:: json;
8
- use axum_extra:: response:: ErasedJson ;
7
+ use axum:: Json ;
9
8
use crates_io_database:: schema:: { crates, users, versions} ;
10
9
use diesel:: prelude:: * ;
11
10
use diesel_async:: RunQueryDsl ;
12
11
use http:: request:: Parts ;
13
12
13
+ #[ derive( Debug , Serialize , utoipa:: ToSchema ) ]
14
+ pub struct RevDepsResponse {
15
+ /// The list of reverse dependencies of the crate.
16
+ dependencies : Vec < EncodableDependency > ,
17
+
18
+ /// The versions referenced in the `dependencies` field.
19
+ versions : Vec < EncodableVersion > ,
20
+
21
+ #[ schema( inline) ]
22
+ meta : RevDepsMeta ,
23
+ }
24
+
25
+ #[ derive( Debug , Serialize , utoipa:: ToSchema ) ]
26
+ pub struct RevDepsMeta {
27
+ #[ schema( example = 32 ) ]
28
+ total : i64 ,
29
+ }
30
+
14
31
/// List reverse dependencies of a crate.
15
32
#[ utoipa:: path(
16
33
get,
17
34
path = "/api/v1/crates/{name}/reverse_dependencies" ,
18
35
params( CratePath ) ,
19
36
tag = "crates" ,
20
- responses( ( status = 200 , description = "Successful Response" ) ) ,
37
+ responses( ( status = 200 , description = "Successful Response" , body = inline ( RevDepsResponse ) ) ) ,
21
38
) ]
22
39
pub async fn list_reverse_dependencies (
23
40
app : AppState ,
24
41
path : CratePath ,
25
42
req : Parts ,
26
- ) -> AppResult < ErasedJson > {
43
+ ) -> AppResult < Json < RevDepsResponse > > {
27
44
let mut conn = app. db_read ( ) . await ?;
28
45
29
46
let pagination_options = PaginationOptions :: builder ( ) . gather ( & req) ?;
@@ -64,9 +81,9 @@ pub async fn list_reverse_dependencies(
64
81
} )
65
82
. collect :: < Vec < _ > > ( ) ;
66
83
67
- Ok ( json ! ( {
68
- " dependencies" : rev_deps,
69
- "versions" : versions,
70
- " meta" : { "total" : total } ,
84
+ Ok ( Json ( RevDepsResponse {
85
+ dependencies : rev_deps,
86
+ versions,
87
+ meta : RevDepsMeta { total } ,
71
88
} ) )
72
89
}
0 commit comments