Skip to content

Commit 711d6be

Browse files
committed
refactor(manifest): Make env macro as minimal as possible
Macros add a lot of code complexity. This tries to reduce it by making the macro do the bare minimum possible. This does cause some extra branching (unless its compiled out) but that shouldn't be prohibitive.
1 parent b16514d commit 711d6be

File tree

1 file changed

+11
-25
lines changed

1 file changed

+11
-25
lines changed

src/cargo/core/manifest.rs

Lines changed: 11 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -156,42 +156,25 @@ macro_rules! get_metadata_env {
156156
};
157157
}
158158

159+
struct MetadataEnvs;
160+
159161
macro_rules! metadata_envs {
160162
(
161163
$(
162164
($field:ident, $key:literal$(, $to_var:expr)?),
163165
)*
164166
) => {
165-
struct MetadataEnvs;
166167
impl MetadataEnvs {
167-
$(
168-
fn $field(meta: &ManifestMetadata) -> Cow<'_, str> {
169-
get_metadata_env!(meta, $field$(, $to_var)?)
170-
}
171-
)*
172-
173-
pub fn should_track(key: &str) -> bool {
174-
let keys = [$($key),*];
175-
keys.iter().any(|k| *k == key)
168+
fn keys() -> &'static [&'static str] {
169+
&[$($key),*]
176170
}
177171

178-
pub fn var<'a>(meta: &'a ManifestMetadata, key: &str) -> Option<Cow<'a, str>> {
172+
fn var<'a>(meta: &'a ManifestMetadata, key: &str) -> Option<Cow<'a, str>> {
179173
match key {
180-
$($key => Some(Self::$field(meta)),)*
174+
$($key => Some(get_metadata_env!(meta, $field$(, $to_var)?)),)*
181175
_ => None,
182176
}
183177
}
184-
185-
pub fn vars(meta: &ManifestMetadata) -> impl Iterator<Item = (&'static str, Cow<'_, str>)> {
186-
[
187-
$(
188-
(
189-
$key,
190-
Self::$field(meta),
191-
),
192-
)*
193-
].into_iter()
194-
}
195178
}
196179
}
197180
}
@@ -213,15 +196,18 @@ metadata_envs! {
213196
impl ManifestMetadata {
214197
/// Whether the given env var should be tracked by Cargo's dep-info.
215198
pub fn should_track(env_key: &str) -> bool {
216-
MetadataEnvs::should_track(env_key)
199+
let keys = MetadataEnvs::keys();
200+
keys.iter().any(|k| *k == env_key)
217201
}
218202

219203
pub fn env_var<'a>(&'a self, env_key: &str) -> Option<Cow<'a, str>> {
220204
MetadataEnvs::var(self, env_key)
221205
}
222206

223207
pub fn env_vars(&self) -> impl Iterator<Item = (&'static str, Cow<'_, str>)> {
224-
MetadataEnvs::vars(self)
208+
MetadataEnvs::keys()
209+
.iter()
210+
.map(|k| (*k, MetadataEnvs::var(self, k).unwrap()))
225211
}
226212
}
227213

0 commit comments

Comments
 (0)