hackety hack
This commit is contained in:
parent
517b6e12c5
commit
41894fb1f1
3 changed files with 42 additions and 12 deletions
|
@ -105,15 +105,27 @@ pub enum SoV<T> {
|
||||||
Many(Vec<T>),
|
Many(Vec<T>),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T> From<Vec<T>> for SoV<T> {
|
impl<T> SoV<T> {
|
||||||
fn from(value: Vec<T>) -> Self {
|
pub fn one(v: T) -> Self {
|
||||||
Self::Many(value)
|
SoV::One(v)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn many(vs: Vec<T>) -> Self {
|
||||||
|
SoV::Many(vs)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T> From<T> for SoV<T> {
|
impl<'a, T> IntoIterator for &'a SoV<T> {
|
||||||
fn from(value: T) -> Self {
|
type Item = &'a T;
|
||||||
Self::One(value)
|
type IntoIter = std::slice::Iter<'a, T>;
|
||||||
|
|
||||||
|
fn into_iter(self) -> Self::IntoIter {
|
||||||
|
let slice = match self {
|
||||||
|
SoV::One(v) => std::slice::from_ref(v),
|
||||||
|
SoV::Many(vs) => vs.as_slice(),
|
||||||
|
};
|
||||||
|
|
||||||
|
slice.iter()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -121,7 +133,7 @@ impl<T> From<T> for SoV<T> {
|
||||||
mod tests {
|
mod tests {
|
||||||
use crate::common::{BasePermission, ExplicitPermissions};
|
use crate::common::{BasePermission, ExplicitPermissions};
|
||||||
|
|
||||||
use super::Permissions;
|
use super::{Permissions, SoV};
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_permissions() {
|
fn test_permissions() {
|
||||||
|
@ -136,4 +148,17 @@ mod tests {
|
||||||
Ok(_)
|
Ok(_)
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_sov_intoiterator() {
|
||||||
|
let sov_one = SoV::one("test".to_string());
|
||||||
|
assert_eq!(sov_one.into_iter().collect::<Vec<_>>(), vec!["test"]);
|
||||||
|
|
||||||
|
let sov_many = SoV::many(vec!["test-1".to_string(), "test-2".to_string()]);
|
||||||
|
assert!(matches!(sov_many, SoV::Many(_)));
|
||||||
|
assert_eq!(
|
||||||
|
sov_many.into_iter().collect::<Vec<_>>(),
|
||||||
|
vec!["test-1", "test-2"]
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,8 @@ use crate::common::{BoE, Env, LoE, Permissions, SoV};
|
||||||
|
|
||||||
use super::{Concurrency, Defaults};
|
use super::{Concurrency, Defaults};
|
||||||
|
|
||||||
|
/// A "normal" GitHub Actions workflow job, i.e. a job composed of one
|
||||||
|
/// or more steps on a runner.
|
||||||
#[derive(Deserialize)]
|
#[derive(Deserialize)]
|
||||||
#[serde(rename_all = "kebab-case")]
|
#[serde(rename_all = "kebab-case")]
|
||||||
pub struct NormalJob {
|
pub struct NormalJob {
|
||||||
|
|
|
@ -1,9 +1,12 @@
|
||||||
use std::{env, path::Path};
|
use std::{env, path::Path};
|
||||||
|
|
||||||
use glomar_models::workflow::{
|
use glomar_models::{
|
||||||
event::OptionalBody,
|
common::SoV,
|
||||||
job::{RunsOn, StepBody},
|
workflow::{
|
||||||
Job, Trigger, Workflow,
|
event::OptionalBody,
|
||||||
|
job::{RunsOn, StepBody},
|
||||||
|
Job, Trigger, Workflow,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
fn load_workflow(name: &str) -> Workflow {
|
fn load_workflow(name: &str) -> Workflow {
|
||||||
|
@ -41,7 +44,7 @@ fn test_pip_audit_ci() {
|
||||||
assert_eq!(test_job.name, None);
|
assert_eq!(test_job.name, None);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
test_job.runs_on,
|
test_job.runs_on,
|
||||||
RunsOn::Target(String::from("ubuntu-latest").into())
|
RunsOn::Target(SoV::one("ubuntu-latest".to_string()))
|
||||||
);
|
);
|
||||||
assert_eq!(test_job.steps.len(), 3);
|
assert_eq!(test_job.steps.len(), 3);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue