1+ use std:: collections:: HashSet ;
2+
13use super :: ParsedManifest ;
24
35/// All local dependencies are emptied out when running `prepare`.
@@ -23,7 +25,7 @@ const CONST_VERSION: &str = "0.0.1";
2325
2426fn mask_local_versions_in_lockfile (
2527 lock_file : & mut toml:: Value ,
26- local_package_names : & [ toml :: Value ] ,
28+ local_package_names : & HashSet < String > ,
2729) {
2830 if let Some ( packages) = lock_file
2931 . get_mut ( "package" )
@@ -35,6 +37,7 @@ fn mask_local_versions_in_lockfile(
3537 . filter ( |package| {
3638 package
3739 . get ( "name" )
40+ . and_then ( |name| name. as_str ( ) )
3841 . map ( |name| local_package_names. contains ( name) )
3942 . unwrap_or_default ( )
4043 && package. get ( "source" ) . is_none ( )
@@ -50,7 +53,7 @@ fn mask_local_versions_in_lockfile(
5053
5154fn mask_local_versions_in_manifests (
5255 manifests : & mut [ ParsedManifest ] ,
53- local_package_names : & [ toml :: Value ] ,
56+ local_package_names : & HashSet < String > ,
5457) {
5558 for manifest in manifests. iter_mut ( ) {
5659 if let Some ( package) = manifest. contents . get_mut ( "package" ) {
@@ -65,10 +68,10 @@ fn mask_local_versions_in_manifests(
6568}
6669
6770fn mask_local_dependency_versions (
68- local_package_names : & [ toml :: Value ] ,
71+ local_package_names : & HashSet < String > ,
6972 manifest : & mut ParsedManifest ,
7073) {
71- fn _mask ( local_package_names : & [ toml :: Value ] , toml_value : & mut toml:: Value ) {
74+ fn _mask ( local_package_names : & HashSet < String > , toml_value : & mut toml:: Value ) {
7275 for dependency_key in [ "dependencies" , "dev-dependencies" , "build-dependencies" ] {
7376 if let Some ( dependencies) = toml_value. get_mut ( dependency_key) {
7477 if let Some ( dependencies) = dependencies. as_table_mut ( ) {
@@ -83,13 +86,16 @@ fn mask_local_dependency_versions(
8386 if let Some ( package_name) = dependency. get ( "package" ) {
8487 // We are dealing with a renamed package, so we check the name of the
8588 // "source" package.
86- if local_package_names. contains ( package_name) {
89+ if package_name
90+ . as_str ( )
91+ . is_some_and ( |n| local_package_names. contains ( n) )
92+ {
8793 must_mark_version = true ;
8894 }
8995 } else {
9096 // The package has not been renamed, so we check the name of the
9197 // key in the dependencies table.
92- if local_package_names. contains ( & toml :: Value :: String ( key. to_string ( ) ) ) {
98+ if local_package_names. contains ( key. as_str ( ) ) {
9399 must_mark_version = true ;
94100 }
95101 }
@@ -149,14 +155,15 @@ fn mask_local_dependency_versions(
149155 }
150156}
151157
152- fn parse_local_crate_names ( manifests : & [ ParsedManifest ] ) -> Vec < toml:: Value > {
153- let mut local_package_names = vec ! [ ] ;
154- for manifest in manifests. iter ( ) {
155- if let Some ( package) = manifest. contents . get ( "package" ) {
156- if let Some ( name) = package. get ( "name" ) {
157- local_package_names. push ( name. to_owned ( ) ) ;
158- }
159- }
160- }
161- local_package_names
158+ fn parse_local_crate_names ( manifests : & [ ParsedManifest ] ) -> HashSet < String > {
159+ manifests
160+ . iter ( )
161+ . filter_map ( |m| {
162+ m. contents
163+ . get ( "package" ) ?
164+ . get ( "name" ) ?
165+ . as_str ( )
166+ . map ( String :: from)
167+ } )
168+ . collect ( )
162169}
0 commit comments