hackety hack

This commit is contained in:
William Woodruff 2024-01-01 23:27:12 -05:00
parent 517b6e12c5
commit 41894fb1f1
No known key found for this signature in database
3 changed files with 42 additions and 12 deletions

View file

@ -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"]
);
}
} }

View file

@ -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 {

View file

@ -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);