Skip to content

Commit fcf33d6

Browse files
committed
Use Variantly to auto-generate these methods
Signed-off-by: J Robert Ray <[email protected]>
1 parent 36d341b commit fcf33d6

File tree

6 files changed

+20
-45
lines changed

6 files changed

+20
-45
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/spk-cli/common/src/flags.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -596,7 +596,7 @@ impl Requests {
596596
let mut req = serde_yaml::from_value::<Request>(request_data.into())
597597
.into_diagnostic()
598598
.wrap_err_with(|| format!("Failed to parse request {request}"))?
599-
.into_pkg()
599+
.pkg()
600600
.ok_or_else(|| miette!("Expected a package request, got None"))?;
601601
req.add_requester(RequestedBy::CommandLine);
602602

crates/spk-schema/crates/ident/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ spk-schema-foundation = { workspace = true }
3131
tap = { workspace = true }
3232
thiserror = { workspace = true }
3333
miette = { workspace = true }
34+
variantly = { workspace = true }
3435

3536
[dev-dependencies]
3637
data-encoding = "2.3"

crates/spk-schema/crates/ident/src/request.rs

Lines changed: 2 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ use spk_schema_foundation::version_range::{
3939
};
4040
use spk_schema_foundation::IsDefault;
4141
use tap::Tap;
42+
use variantly::Variantly;
4243

4344
use super::AnyIdent;
4445
use crate::{BuildIdent, Error, RangeIdent, Result, Satisfy, VersionIdent};
@@ -176,7 +177,7 @@ impl<'de> Deserialize<'de> for PinPolicy {
176177
}
177178

178179
/// Represents a constraint added to a resolved environment.
179-
#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)]
180+
#[derive(Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize, Variantly)]
180181
#[serde(untagged)]
181182
pub enum Request {
182183
Pkg(PkgRequest),
@@ -191,28 +192,6 @@ impl Request {
191192
Request::Pkg(r) => r.pkg.name.as_opt_name(),
192193
}
193194
}
194-
195-
pub fn is_pkg(&self) -> bool {
196-
matches!(self, Self::Pkg(_))
197-
}
198-
199-
pub fn into_pkg(self) -> Option<PkgRequest> {
200-
match self {
201-
Self::Pkg(p) => Some(p),
202-
_ => None,
203-
}
204-
}
205-
206-
pub fn is_var(&self) -> bool {
207-
matches!(self, Self::Var(_))
208-
}
209-
210-
pub fn into_var(self) -> Option<VarRequest> {
211-
match self {
212-
Self::Var(v) => Some(v),
213-
_ => None,
214-
}
215-
}
216195
}
217196

218197
impl std::fmt::Display for Request {

crates/spk-schema/crates/ident/src/request_test.rs

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,11 @@ fn test_prerelease_policy_restricts(
7373
) {
7474
let mut a = serde_yaml::from_str::<Request>(request_a)
7575
.unwrap()
76-
.into_pkg()
76+
.pkg()
7777
.expect("expected pkg request");
7878
let b = serde_yaml::from_str::<Request>(request_b)
7979
.unwrap()
80-
.into_pkg()
80+
.pkg()
8181
.expect("expected pkg request");
8282

8383
a.restrict(&b).unwrap();
@@ -149,11 +149,11 @@ fn test_prerelease_policy_contains(
149149
) {
150150
let a = serde_yaml::from_str::<Request>(request_a)
151151
.unwrap()
152-
.into_pkg()
152+
.pkg()
153153
.expect("expected pkg request");
154154
let b = serde_yaml::from_str::<Request>(request_b)
155155
.unwrap()
156-
.into_pkg()
156+
.pkg()
157157
.expect("expected pkg request");
158158

159159
let compat = a.contains(&b);
@@ -164,11 +164,11 @@ fn test_prerelease_policy_contains(
164164
fn test_inclusion_policy() {
165165
let mut a = serde_yaml::from_str::<Request>("{pkg: something, include: IfAlreadyPresent}")
166166
.unwrap()
167-
.into_pkg()
167+
.pkg()
168168
.expect("expected pkg request");
169169
let b = serde_yaml::from_str::<Request>("{pkg: something, include: Always}")
170170
.unwrap()
171-
.into_pkg()
171+
.pkg()
172172
.expect("expected pkg request");
173173

174174
a.restrict(&b).unwrap();
@@ -182,11 +182,11 @@ fn test_inclusion_policy() {
182182
fn test_compat_and_equals_restrict() {
183183
let mut a = serde_yaml::from_str::<Request>("{pkg: something/Binary:1.2.3}")
184184
.unwrap()
185-
.into_pkg()
185+
.pkg()
186186
.expect("expected pkg request");
187187
let b = serde_yaml::from_str::<Request>("{pkg: something/=1.2.3}")
188188
.unwrap()
189-
.into_pkg()
189+
.pkg()
190190
.expect("expected pkg request");
191191

192192
a.restrict(&b).unwrap();
@@ -247,14 +247,8 @@ fn test_inclusion_policy_and_merge(
247247
#[case] expected_policy: InclusionPolicy,
248248
#[case] expected_merged_range: Option<&str>,
249249
) {
250-
let mut a = serde_yaml::from_str::<Request>(a)
251-
.unwrap()
252-
.into_pkg()
253-
.unwrap();
254-
let b = serde_yaml::from_str::<Request>(b)
255-
.unwrap()
256-
.into_pkg()
257-
.unwrap();
250+
let mut a = serde_yaml::from_str::<Request>(a).unwrap().pkg().unwrap();
251+
let b = serde_yaml::from_str::<Request>(b).unwrap().pkg().unwrap();
258252

259253
let r = a.restrict(&b);
260254
match expected_merged_range {
@@ -306,7 +300,7 @@ fn test_var_request_pinned_roundtrip() {
306300
"should be able to round-trip serialize a var request with pin"
307301
);
308302
assert!(
309-
res.unwrap().into_var().unwrap().value.is_from_build_env(),
303+
res.unwrap().var().unwrap().value.is_from_build_env(),
310304
"should preserve pin value"
311305
);
312306
}
@@ -347,7 +341,7 @@ fn test_pkg_request_pin_rendering(
347341
) {
348342
let req = serde_yaml::from_str::<Request>(&format!("{{pkg: test, fromBuildEnv: {pin}}}"))
349343
.unwrap()
350-
.into_pkg()
344+
.pkg()
351345
.expect("expected package request");
352346
let version = parse_build_ident(format!("test/{version}/src")).unwrap();
353347
let res = req
@@ -473,7 +467,7 @@ fn test_deserialize_pkg_pin_string_or_bool() {
473467
let reqs = Vec::<Request>::from_yaml(YAML).expect("expected yaml parsing to succeed");
474468
let pins: Vec<_> = reqs
475469
.into_iter()
476-
.map(|r| r.into_pkg().expect("expected a pkg request").pin)
470+
.map(|r| r.pkg().expect("expected a pkg request").pin)
477471
.collect();
478472
assert_eq!(
479473
pins,

crates/spk-solve/crates/validation/src/validation_test.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,11 +103,11 @@ fn test_qualified_var_supersedes_unqualified() {
103103
vec![
104104
Request::from_yaml("{var: debug/off}")
105105
.unwrap()
106-
.into_var()
106+
.var()
107107
.unwrap(),
108108
Request::from_yaml("{var: my-package.debug/on}")
109109
.unwrap()
110-
.into_var()
110+
.var()
111111
.unwrap(),
112112
],
113113
vec![],

0 commit comments

Comments
 (0)