1- use std:: borrow:: Cow ;
21use std:: cell:: { Cell , Ref , RefCell , RefMut } ;
32use std:: cmp:: Ordering ;
43use std:: collections:: { BTreeMap , BTreeSet , HashMap , HashSet } ;
@@ -7,7 +6,6 @@ use std::hash;
76use std:: mem;
87use std:: path:: { Path , PathBuf } ;
98use std:: rc:: Rc ;
10- use std:: str:: FromStr ;
119use std:: time:: { Duration , Instant } ;
1210
1311use anyhow:: Context as _;
@@ -254,122 +252,6 @@ impl Package {
254252 }
255253}
256254
257- /// "Emittable" here meaning emitted to rustc as enviromental variables. Usable by `env!()`
258- /// If these change we need to trigger a rebuild
259- /// NOTE: If you add a new variant also add a mapping entry in [`EMITTED_METADATA_MAPPINGS`]
260- #[ derive( Debug , Copy , Clone , PartialEq , Eq ) ]
261- pub enum EmittablePackageMetadata {
262- ManifestDir ,
263- ManifestPath ,
264- Name ,
265- Version ,
266- VersionMajor ,
267- VersionMinor ,
268- VersionPatch ,
269- VersionPre ,
270- Description ,
271- Homepage ,
272- Repository ,
273- License ,
274- LicenseFile ,
275- Authors ,
276- RustVersion ,
277- Readme ,
278- }
279-
280- use crate :: core:: package:: EmittablePackageMetadata :: * ;
281- const EMITTED_METADATA_MAPPINGS : [ ( EmittablePackageMetadata , & ' static str ) ; 16 ] = [
282- ( ManifestDir , "CARGO_MANIFEST_DIR" ) ,
283- ( ManifestPath , "CARGO_MANIFEST_PATH" ) ,
284- ( Name , "CARGO_PKG_NAME" ) ,
285- ( Version , "CARGO_PKG_VERSION" ) ,
286- ( VersionMajor , "CARGO_PKG_VERSION_MAJOR" ) ,
287- ( VersionMinor , "CARGO_PKG_VERSION_MINOR" ) ,
288- ( VersionPatch , "CARGO_PKG_VERSION_PATCH" ) ,
289- ( VersionPre , "CARGO_PKG_VERSION_PRE" ) ,
290- ( Description , "CARGO_PKG_DESCRIPTION" ) ,
291- ( Homepage , "CARGO_PKG_HOMEPAGE" ) ,
292- ( Repository , "CARGO_PKG_REPOSITORY" ) ,
293- ( License , "CARGO_PKG_LICENSE" ) ,
294- ( LicenseFile , "CARGO_PKG_LICENSE_FILE" ) ,
295- ( Authors , "CARGO_PKG_AUTHORS" ) ,
296- ( RustVersion , "CARGO_PKG_RUST_VERSION" ) ,
297- ( Readme , "CARGO_PKG_README" ) ,
298- ] ;
299-
300- impl FromStr for EmittablePackageMetadata {
301- type Err = String ;
302-
303- fn from_str ( value : & str ) -> Result < Self , Self :: Err > {
304- if let Some ( v) = EMITTED_METADATA_MAPPINGS . iter ( ) . find ( |v| v. 1 == value) {
305- return Ok ( v. 0 ) ;
306- }
307-
308- return Err ( format ! ( "Invalid emittable manifest metadata key {value}" ) ) ;
309- }
310- }
311-
312- impl From < EmittablePackageMetadata > for & ' static str {
313- fn from ( value : EmittablePackageMetadata ) -> Self {
314- if let Some ( v) = EMITTED_METADATA_MAPPINGS . iter ( ) . find ( |v| v. 0 == value) {
315- return v. 1 ;
316- }
317-
318- unreachable ! ( "unknown package metadata" ) ;
319- }
320- }
321-
322- impl EmittablePackageMetadata {
323- pub fn is_emittable_env_var ( key : & str ) -> bool {
324- EmittablePackageMetadata :: from_str ( key) . is_ok ( )
325- }
326- }
327-
328- impl Package {
329- // k/v pairs of the metadata environmental variables emitted to rustc.
330- pub fn emitted_env_vars ( & self ) -> Vec < ( & ' static str , Cow < ' _ , str > ) > {
331- let mut vars = Vec :: with_capacity ( EMITTED_METADATA_MAPPINGS . len ( ) ) ;
332-
333- for ( key, name) in EMITTED_METADATA_MAPPINGS {
334- let value = self . emitted_env_var ( & key) ;
335- vars. push ( ( name, value) ) ;
336- }
337-
338- return vars;
339- }
340-
341- pub fn emitted_env_var < ' a > ( & ' a self , key : & EmittablePackageMetadata ) -> Cow < ' a , str > {
342- let metadata = self . manifest ( ) . metadata ( ) ;
343- let value = match key {
344- ManifestDir => self . root ( ) . as_os_str ( ) . to_str ( ) . unwrap_or_default ( ) ,
345- ManifestPath => self
346- . manifest_path ( )
347- . as_os_str ( )
348- . to_str ( )
349- . unwrap_or_default ( ) ,
350- Name => self . name ( ) . as_str ( ) ,
351- Version => return Cow :: Owned ( self . version ( ) . to_string ( ) ) ,
352- VersionMajor => return Cow :: Owned ( self . version ( ) . major . to_string ( ) ) ,
353- VersionMinor => return Cow :: Owned ( self . version ( ) . minor . to_string ( ) ) ,
354- VersionPatch => return Cow :: Owned ( self . version ( ) . patch . to_string ( ) ) ,
355- VersionPre => return Cow :: Owned ( self . version ( ) . pre . to_string ( ) ) ,
356- Description => metadata. description . as_deref ( ) . unwrap_or_default ( ) ,
357- Homepage => metadata. homepage . as_deref ( ) . unwrap_or_default ( ) ,
358- Repository => metadata. repository . as_deref ( ) . unwrap_or_default ( ) ,
359- License => metadata. license . as_deref ( ) . unwrap_or_default ( ) ,
360- LicenseFile => metadata. license_file . as_deref ( ) . unwrap_or_default ( ) ,
361- Authors => return Cow :: Owned ( metadata. authors . join ( ":" ) ) ,
362- RustVersion => {
363- let rust_version = metadata. rust_version . as_ref ( ) . map ( ToString :: to_string) ;
364- return Cow :: Owned ( rust_version. unwrap_or_default ( ) ) ;
365- }
366- Readme => metadata. readme . as_deref ( ) . unwrap_or_default ( ) ,
367- } ;
368-
369- return Cow :: Borrowed ( value) ;
370- }
371- }
372-
373255impl fmt:: Display for Package {
374256 fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
375257 write ! ( f, "{}" , self . summary( ) . package_id( ) )
0 commit comments