@@ -72,6 +72,7 @@ impl<'de> de::Deserialize<'de> for PackageId {
72
72
let string = String :: deserialize ( d) ?;
73
73
let mut s = string. splitn ( 3 , ' ' ) ;
74
74
let name = s. next ( ) . unwrap ( ) ;
75
+ let name = InternedString :: new ( name) ;
75
76
let version = match s. next ( ) {
76
77
Some ( s) => s,
77
78
None => return Err ( de:: Error :: custom ( "invalid serialized PackageId" ) ) ,
@@ -88,11 +89,7 @@ impl<'de> de::Deserialize<'de> for PackageId {
88
89
} ;
89
90
let source_id = SourceId :: from_url ( url) . map_err ( de:: Error :: custom) ?;
90
91
91
- Ok ( PackageId :: wrap ( PackageIdInner {
92
- name : InternedString :: new ( name) ,
93
- version,
94
- source_id,
95
- } ) )
92
+ Ok ( PackageId :: pure ( name, version, source_id) )
96
93
}
97
94
}
98
95
@@ -118,15 +115,15 @@ impl<'a> Hash for PackageId {
118
115
impl PackageId {
119
116
pub fn new < T : ToSemver > ( name : & str , version : T , sid : SourceId ) -> CargoResult < PackageId > {
120
117
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) )
127
119
}
128
120
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
+ } ;
130
127
let mut cache = PACKAGE_ID_CACHE . lock ( ) . unwrap ( ) ;
131
128
let inner = cache. get ( & inner) . cloned ( ) . unwrap_or_else ( || {
132
129
let inner = Box :: leak ( Box :: new ( inner) ) ;
@@ -147,19 +144,15 @@ impl PackageId {
147
144
}
148
145
149
146
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
+ )
155
152
}
156
153
157
154
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)
163
156
}
164
157
165
158
pub fn stable_hash ( self , workspace : & Path ) -> PackageIdStableHash < ' _ > {
0 commit comments