@@ -72,6 +72,7 @@ impl<'de> de::Deserialize<'de> for PackageId {
7272 let string = String :: deserialize ( d) ?;
7373 let mut s = string. splitn ( 3 , ' ' ) ;
7474 let name = s. next ( ) . unwrap ( ) ;
75+ let name = InternedString :: new ( name) ;
7576 let version = match s. next ( ) {
7677 Some ( s) => s,
7778 None => return Err ( de:: Error :: custom ( "invalid serialized PackageId" ) ) ,
@@ -88,11 +89,7 @@ impl<'de> de::Deserialize<'de> for PackageId {
8889 } ;
8990 let source_id = SourceId :: from_url ( url) . map_err ( de:: Error :: custom) ?;
9091
91- Ok ( PackageId :: wrap ( PackageIdInner {
92- name : InternedString :: new ( name) ,
93- version,
94- source_id,
95- } ) )
92+ Ok ( PackageId :: pure ( name, version, source_id) )
9693 }
9794}
9895
@@ -118,15 +115,15 @@ impl<'a> Hash for PackageId {
118115impl PackageId {
119116 pub fn new < T : ToSemver > ( name : & str , version : T , sid : SourceId ) -> CargoResult < PackageId > {
120117 let v = version. to_semver ( ) ?;
121-
122- Ok ( PackageId :: wrap ( PackageIdInner {
123- name : InternedString :: new ( name) ,
124- version : v,
125- source_id : sid,
126- } ) )
118+ Ok ( PackageId :: pure ( InternedString :: new ( name) , v, sid) )
127119 }
128120
129- fn wrap ( inner : PackageIdInner ) -> PackageId {
121+ pub fn pure ( name : InternedString , version : semver:: Version , source_id : SourceId ) -> PackageId {
122+ let inner = PackageIdInner {
123+ name,
124+ version,
125+ source_id,
126+ } ;
130127 let mut cache = PACKAGE_ID_CACHE . lock ( ) . unwrap ( ) ;
131128 let inner = cache. get ( & inner) . cloned ( ) . unwrap_or_else ( || {
132129 let inner = Box :: leak ( Box :: new ( inner) ) ;
@@ -147,19 +144,15 @@ impl PackageId {
147144 }
148145
149146 pub fn with_precise ( self , precise : Option < String > ) -> PackageId {
150- PackageId :: wrap ( PackageIdInner {
151- name : self . inner . name ,
152- version : self . inner . version . clone ( ) ,
153- source_id : self . inner . source_id . with_precise ( precise) ,
154- } )
147+ PackageId :: pure (
148+ self . inner . name ,
149+ self . inner . version . clone ( ) ,
150+ self . inner . source_id . with_precise ( precise) ,
151+ )
155152 }
156153
157154 pub fn with_source_id ( self , source : SourceId ) -> PackageId {
158- PackageId :: wrap ( PackageIdInner {
159- name : self . inner . name ,
160- version : self . inner . version . clone ( ) ,
161- source_id : source,
162- } )
155+ PackageId :: pure ( self . inner . name , self . inner . version . clone ( ) , source)
163156 }
164157
165158 pub fn stable_hash ( self , workspace : & Path ) -> PackageIdStableHash < ' _ > {
0 commit comments