@@ -4,7 +4,7 @@ use crate::auth::Authentication;
44use crate :: controllers:: helpers:: pagination:: { Page , PaginationOptions , PaginationQueryParams } ;
55use crate :: models:: { Crate , CrateOwnerInvitation , Rights , User } ;
66use crate :: schema:: { crate_owner_invitations, crates, users} ;
7- use crate :: util:: errors:: { bad_request, forbidden, internal, AppResult } ;
7+ use crate :: util:: errors:: { bad_request, forbidden, internal, AppResult , BoxedAppError } ;
88use crate :: util:: RequestUtils ;
99use crate :: views:: {
1010 EncodableCrateOwnerInvitation , EncodableCrateOwnerInvitationV1 , EncodablePublicUser ,
@@ -101,14 +101,7 @@ pub async fn list_crate_owner_invitations(
101101 let mut conn = app. db_read ( ) . await ?;
102102 let auth = AuthCheck :: only_cookie ( ) . check ( & req, & mut conn) . await ?;
103103
104- let filter = if let Some ( crate_name) = params. crate_name {
105- ListFilter :: CrateName ( crate_name. clone ( ) )
106- } else if let Some ( id) = params. invitee_id {
107- ListFilter :: InviteeId ( id)
108- } else {
109- return Err ( bad_request ( "missing or invalid filter" ) ) ;
110- } ;
111-
104+ let filter = params. try_into ( ) ?;
112105 let list = prepare_list ( & app, & req, auth, filter, & mut conn) . await ?;
113106 Ok ( Json ( list) )
114107}
@@ -118,6 +111,22 @@ enum ListFilter {
118111 InviteeId ( i32 ) ,
119112}
120113
114+ impl TryFrom < ListQueryParams > for ListFilter {
115+ type Error = BoxedAppError ;
116+
117+ fn try_from ( params : ListQueryParams ) -> Result < Self , Self :: Error > {
118+ let filter = if let Some ( crate_name) = params. crate_name {
119+ ListFilter :: CrateName ( crate_name. clone ( ) )
120+ } else if let Some ( id) = params. invitee_id {
121+ ListFilter :: InviteeId ( id)
122+ } else {
123+ return Err ( bad_request ( "missing or invalid filter" ) ) ;
124+ } ;
125+
126+ Ok ( filter)
127+ }
128+ }
129+
121130async fn prepare_list (
122131 state : & AppState ,
123132 req : & Parts ,
0 commit comments