@@ -6,8 +6,6 @@ use crates_io_index::features::FeaturesMap;
66use diesel:: prelude:: * ;
77use serde:: Deserialize ;
88
9- use crate :: util:: errors:: { bad_request, AppResult } ;
10-
119use crate :: models:: { Crate , Dependency , User } ;
1210use crate :: schema:: * ;
1311use crate :: util:: diesel:: Conn ;
@@ -85,7 +83,7 @@ pub struct NewVersion<'a> {
8583 #[ builder( start_fn) ]
8684 num : & ' a str ,
8785 #[ builder( default = strip_build_metadata( num) ) ]
88- num_no_build : & ' a str ,
86+ pub num_no_build : & ' a str ,
8987 created_at : Option < & ' a NaiveDateTime > ,
9088 yanked : Option < bool > ,
9189 #[ builder( default = serde_json:: Value :: Object ( Default :: default ( ) ) ) ]
@@ -102,21 +100,11 @@ pub struct NewVersion<'a> {
102100}
103101
104102impl NewVersion < ' _ > {
105- pub fn save ( & self , conn : & mut impl Conn , published_by_email : & str ) -> AppResult < Version > {
103+ pub fn save ( & self , conn : & mut impl Conn , published_by_email : & str ) -> QueryResult < Version > {
106104 use diesel:: insert_into;
107105
108106 conn. transaction ( |conn| {
109- let version: Version = match insert_into ( versions:: table) . values ( self ) . get_result ( conn)
110- {
111- Err ( error) if is_unique_violation ( & error) => {
112- return Err ( bad_request ( format_args ! (
113- "crate version `{}` is already uploaded" ,
114- self . num_no_build
115- ) ) ) ;
116- }
117- Err ( error) => return Err ( error. into ( ) ) ,
118- Ok ( version) => version,
119- } ;
107+ let version: Version = insert_into ( versions:: table) . values ( self ) . get_result ( conn) ?;
120108
121109 insert_into ( versions_published_by:: table)
122110 . values ( (
@@ -136,11 +124,6 @@ fn strip_build_metadata(version: &str) -> &str {
136124 . unwrap_or ( version)
137125}
138126
139- fn is_unique_violation ( error : & diesel:: result:: Error ) -> bool {
140- use diesel:: result:: { DatabaseErrorKind :: UniqueViolation , Error } ;
141- matches ! ( error, Error :: DatabaseError ( UniqueViolation , _) )
142- }
143-
144127/// The highest version (semver order) and the most recently updated version.
145128/// Typically used for a single crate.
146129#[ derive( Debug , Clone , Eq , PartialEq ) ]
0 commit comments