@@ -138,10 +138,10 @@ impl Default for Yanked {
138138/// PEP 691 says multiple hashes can be included and the interpretation is left to the client. 
139139#[ derive( Debug ,  Clone ,  Eq ,  PartialEq ,  Default ,  Deserialize ) ]  
140140pub  struct  Hashes  { 
141-     pub  md5 :  Option < Box < str > > , 
142-     pub  sha256 :  Option < Box < str > > , 
143-     pub  sha384 :  Option < Box < str > > , 
144-     pub  sha512 :  Option < Box < str > > , 
141+     pub  md5 :  Option < SmallString > , 
142+     pub  sha256 :  Option < SmallString > , 
143+     pub  sha384 :  Option < SmallString > , 
144+     pub  sha512 :  Option < SmallString > , 
145145} 
146146
147147impl  Hashes  { 
@@ -163,42 +163,30 @@ impl Hashes {
163163        } 
164164
165165        match  name { 
166-             "md5"  => { 
167-                 let  md5 = value. to_owned ( ) . into_boxed_str ( ) ; 
168-                 Ok ( Hashes  { 
169-                     md5 :  Some ( md5) , 
170-                     sha256 :  None , 
171-                     sha384 :  None , 
172-                     sha512 :  None , 
173-                 } ) 
174-             } 
175-             "sha256"  => { 
176-                 let  sha256 = value. to_owned ( ) . into_boxed_str ( ) ; 
177-                 Ok ( Hashes  { 
178-                     md5 :  None , 
179-                     sha256 :  Some ( sha256) , 
180-                     sha384 :  None , 
181-                     sha512 :  None , 
182-                 } ) 
183-             } 
184-             "sha384"  => { 
185-                 let  sha384 = value. to_owned ( ) . into_boxed_str ( ) ; 
186-                 Ok ( Hashes  { 
187-                     md5 :  None , 
188-                     sha256 :  None , 
189-                     sha384 :  Some ( sha384) , 
190-                     sha512 :  None , 
191-                 } ) 
192-             } 
193-             "sha512"  => { 
194-                 let  sha512 = value. to_owned ( ) . into_boxed_str ( ) ; 
195-                 Ok ( Hashes  { 
196-                     md5 :  None , 
197-                     sha256 :  None , 
198-                     sha384 :  None , 
199-                     sha512 :  Some ( sha512) , 
200-                 } ) 
201-             } 
166+             "md5"  => Ok ( Hashes  { 
167+                 md5 :  Some ( SmallString :: from ( value) ) , 
168+                 sha256 :  None , 
169+                 sha384 :  None , 
170+                 sha512 :  None , 
171+             } ) , 
172+             "sha256"  => Ok ( Hashes  { 
173+                 md5 :  None , 
174+                 sha256 :  Some ( SmallString :: from ( value) ) , 
175+                 sha384 :  None , 
176+                 sha512 :  None , 
177+             } ) , 
178+             "sha384"  => Ok ( Hashes  { 
179+                 md5 :  None , 
180+                 sha256 :  None , 
181+                 sha384 :  Some ( SmallString :: from ( value) ) , 
182+                 sha512 :  None , 
183+             } ) , 
184+             "sha512"  => Ok ( Hashes  { 
185+                 md5 :  None , 
186+                 sha256 :  None , 
187+                 sha384 :  None , 
188+                 sha512 :  Some ( SmallString :: from ( value) ) , 
189+             } ) , 
202190            _ => Err ( HashError :: UnsupportedHashAlgorithm ( fragment. to_string ( ) ) ) , 
203191        } 
204192    } 
@@ -224,42 +212,30 @@ impl FromStr for Hashes {
224212        } 
225213
226214        match  name { 
227-             "md5"  => { 
228-                 let  md5 = value. to_owned ( ) . into_boxed_str ( ) ; 
229-                 Ok ( Hashes  { 
230-                     md5 :  Some ( md5) , 
231-                     sha256 :  None , 
232-                     sha384 :  None , 
233-                     sha512 :  None , 
234-                 } ) 
235-             } 
236-             "sha256"  => { 
237-                 let  sha256 = value. to_owned ( ) . into_boxed_str ( ) ; 
238-                 Ok ( Hashes  { 
239-                     md5 :  None , 
240-                     sha256 :  Some ( sha256) , 
241-                     sha384 :  None , 
242-                     sha512 :  None , 
243-                 } ) 
244-             } 
245-             "sha384"  => { 
246-                 let  sha384 = value. to_owned ( ) . into_boxed_str ( ) ; 
247-                 Ok ( Hashes  { 
248-                     md5 :  None , 
249-                     sha256 :  None , 
250-                     sha384 :  Some ( sha384) , 
251-                     sha512 :  None , 
252-                 } ) 
253-             } 
254-             "sha512"  => { 
255-                 let  sha512 = value. to_owned ( ) . into_boxed_str ( ) ; 
256-                 Ok ( Hashes  { 
257-                     md5 :  None , 
258-                     sha256 :  None , 
259-                     sha384 :  None , 
260-                     sha512 :  Some ( sha512) , 
261-                 } ) 
262-             } 
215+             "md5"  => Ok ( Hashes  { 
216+                 md5 :  Some ( SmallString :: from ( value) ) , 
217+                 sha256 :  None , 
218+                 sha384 :  None , 
219+                 sha512 :  None , 
220+             } ) , 
221+             "sha256"  => Ok ( Hashes  { 
222+                 md5 :  None , 
223+                 sha256 :  Some ( SmallString :: from ( value) ) , 
224+                 sha384 :  None , 
225+                 sha512 :  None , 
226+             } ) , 
227+             "sha384"  => Ok ( Hashes  { 
228+                 md5 :  None , 
229+                 sha256 :  None , 
230+                 sha384 :  Some ( SmallString :: from ( value) ) , 
231+                 sha512 :  None , 
232+             } ) , 
233+             "sha512"  => Ok ( Hashes  { 
234+                 md5 :  None , 
235+                 sha256 :  None , 
236+                 sha384 :  None , 
237+                 sha512 :  Some ( SmallString :: from ( value) ) , 
238+             } ) , 
263239            _ => Err ( HashError :: UnsupportedHashAlgorithm ( s. to_string ( ) ) ) , 
264240        } 
265241    } 
@@ -331,7 +307,7 @@ impl std::fmt::Display for HashAlgorithm {
331307#[ rkyv( derive( Debug ) ) ]  
332308pub  struct  HashDigest  { 
333309    pub  algorithm :  HashAlgorithm , 
334-     pub  digest :  Box < str > , 
310+     pub  digest :  SmallString , 
335311} 
336312
337313impl  HashDigest  { 
@@ -367,11 +343,9 @@ impl FromStr for HashDigest {
367343        } 
368344
369345        let  algorithm = HashAlgorithm :: from_str ( name) ?; 
346+         let  digest = SmallString :: from ( value) ; 
370347
371-         Ok ( HashDigest  { 
372-             algorithm, 
373-             digest :  value. to_owned ( ) . into_boxed_str ( ) , 
374-         } ) 
348+         Ok ( Self  {  algorithm,  digest } ) 
375349    } 
376350} 
377351
0 commit comments