Skip to content

Commit 6f29278

Browse files
committed
Adding more constants
Signed-off-by: David Gilligan-Cook <[email protected]>
1 parent 9d4b430 commit 6f29278

File tree

1 file changed

+36
-29
lines changed

1 file changed

+36
-29
lines changed

crates/spk-schema/src/build_spec.rs

Lines changed: 36 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use strum::Display;
1010

1111
use super::foundation::option_map::OptionMap;
1212
use super::{v0, Opt, ValidationSpec};
13-
use crate::name::{OptName, OptNameBuf};
13+
use crate::name::OptName;
1414
use crate::option::VarOpt;
1515
use crate::{Error, Result, Variant};
1616

@@ -20,6 +20,22 @@ mod build_spec_test;
2020

2121
// TODO: could move to another file nearer the host_options() function
2222
// in use super::foundation::option_map
23+
24+
// Each HostCompat value adds a different set of host related options when used.
25+
// TODO: move these to config
26+
const DISTRO_ADDS: &[&OptName] = &[OptName::os(), OptName::arch(), OptName::distro()];
27+
const ARCH_ADDS: &[&OptName] = &[OptName::os(), OptName::arch()];
28+
const OS_ADDS: &[&OptName] = &[OptName::os()];
29+
const ANY_ADDS: &[&OptName] = &[];
30+
31+
// Each HostCompat value disallows certain var names when host_compat
32+
// validation is enabled in the config file.
33+
// TODO: move these to config
34+
const DISTRO_DISALLOWS: &[&OptName] = &[];
35+
const ARCH_DISALLOWS: &[&OptName] = &[OptName::distro()];
36+
const OS_DISALLOWS: &[&OptName] = &[OptName::distro(), OptName::arch()];
37+
const ANY_DISALLOWS: &[&OptName] = &[OptName::distro(), OptName::arch(), OptName::os()];
38+
2339
/// Set what level of cross-platform compatibility the built package
2440
/// should have.
2541
#[derive(
@@ -37,33 +53,20 @@ pub enum HostCompat {
3753
Any,
3854
}
3955

40-
// Each HostCompat value disallows certain var names when host_compat
41-
// validation is enabled in the config file.
42-
// TODO: move these to config
43-
const DISTRO_DISALLOWS: &[&OptName] = &[];
44-
const ARCH_DISALLOWS: &[&OptName] = &[OptName::distro()];
45-
const OS_DISALLOWS: &[&OptName] = &[OptName::distro(), OptName::arch()];
46-
const ANY_DISALLOWS: &[&OptName] = &[OptName::distro(), OptName::arch(), OptName::os()];
47-
4856
impl HostCompat {
4957
pub fn is_default(&self) -> bool {
5058
self == &Self::default()
5159
}
5260

53-
fn names_added(&self) -> HashSet<OptNameBuf> {
54-
// TODO: move this to constants/config
61+
fn names_added(&self) -> HashSet<&OptName> {
5562
let names = match self {
56-
HostCompat::Distro => vec![
57-
OptName::os().to_owned(),
58-
OptName::arch().to_owned(),
59-
OptName::distro().to_owned(),
60-
],
61-
HostCompat::Arch => vec![OptName::os().to_owned(), OptName::arch().to_owned()],
62-
HostCompat::Os => vec![OptName::os().to_owned()],
63-
HostCompat::Any => Vec::new(),
63+
HostCompat::Distro => DISTRO_ADDS,
64+
HostCompat::Arch => ARCH_ADDS,
65+
HostCompat::Os => OS_ADDS,
66+
HostCompat::Any => ANY_ADDS,
6467
};
6568

66-
names.into_iter().collect::<HashSet<OptNameBuf>>()
69+
names.iter().copied().collect::<HashSet<&OptName>>()
6770
}
6871

6972
/// Get host_options after filtering based on the cross Os
@@ -72,24 +75,28 @@ impl HostCompat {
7275
let all_host_options = spk_schema_foundation::option_map::host_options()?;
7376

7477
let mut names_added = self.names_added();
78+
let distro_name;
7579
if HostCompat::Distro == *self {
7680
match all_host_options.get(OptName::distro()) {
77-
Some(distro_name) => match OptNameBuf::try_from(distro_name.clone()) {
78-
Ok(name) => _ = names_added.insert(name),
79-
Err(err) => {
80-
return Err(Error::HostOptionNotValidDistroNameError(
81-
distro_name.to_string(),
82-
err,
83-
))
81+
Some(distro) => {
82+
distro_name = distro.clone();
83+
match OptName::new(&distro_name) {
84+
Ok(name) => _ = names_added.insert(name),
85+
Err(err) => {
86+
return Err(Error::HostOptionNotValidDistroNameError(
87+
distro_name.to_string(),
88+
err,
89+
))
90+
}
8491
}
85-
},
92+
}
8693
None => return Err(Error::HostOptionNoDistroName),
8794
}
8895
}
8996

9097
let mut settings = Vec::new();
9198
for (name, value) in all_host_options.iter() {
92-
if names_added.contains(name) {
99+
if names_added.contains(&OptName::new(name)?) {
93100
let mut opt = Opt::Var(VarOpt::new(name)?);
94101
opt.set_value(value.to_string())?;
95102
settings.push(opt)

0 commit comments

Comments
 (0)