feat: add slot for upload strategy
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
Signed-off-by: kjuulh <contact@kjuulh.io>
This commit is contained in:
parent
b980ac949e
commit
cdae730c6b
@ -13,7 +13,25 @@ use tokio_stream::{wrappers::ReadDirStream, StreamExt};
|
|||||||
use crate::components::{ConcreteComponent, IntoComponent};
|
use crate::components::{ConcreteComponent, IntoComponent};
|
||||||
|
|
||||||
pub async fn process() -> anyhow::Result<()> {
|
pub async fn process() -> anyhow::Result<()> {
|
||||||
process_opts(Vec::<ConcreteComponent>::new(), ProcessOpts::default()).await
|
process_opts(
|
||||||
|
Vec::<ConcreteComponent>::new(),
|
||||||
|
ProcessOpts::default(),
|
||||||
|
None::<NoUploadStrategy>,
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
}
|
||||||
|
|
||||||
|
pub trait UploadStrategy {
|
||||||
|
fn upload(&self, input_path: &Path) -> BoxFuture<'_, anyhow::Result<()>>;
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Default)]
|
||||||
|
pub struct NoUploadStrategy {}
|
||||||
|
|
||||||
|
impl UploadStrategy for NoUploadStrategy {
|
||||||
|
fn upload(&self, input_path: &Path) -> BoxFuture<'_, anyhow::Result<()>> {
|
||||||
|
async move { Ok(()) }.boxed()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct ProcessOpts {
|
pub struct ProcessOpts {
|
||||||
@ -42,6 +60,7 @@ const CUDDLE_PLAN_PATH_PREFIX: &str = ".cuddle/base";
|
|||||||
pub async fn process_opts(
|
pub async fn process_opts(
|
||||||
components: impl IntoIterator<Item = impl IntoComponent>,
|
components: impl IntoIterator<Item = impl IntoComponent>,
|
||||||
opts: ProcessOpts,
|
opts: ProcessOpts,
|
||||||
|
upload_strategy: Option<impl UploadStrategy>,
|
||||||
) -> anyhow::Result<()> {
|
) -> anyhow::Result<()> {
|
||||||
let components = components
|
let components = components
|
||||||
.into_iter()
|
.into_iter()
|
||||||
@ -76,6 +95,10 @@ pub async fn process_opts(
|
|||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
|
if let Some(upload_strategy) = upload_strategy {
|
||||||
|
upload_strategy.upload(&opts.output).await?;
|
||||||
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
use std::{cmp::Ordering, collections::HashMap, path::Path};
|
use std::{cmp::Ordering, collections::HashMap, path::Path};
|
||||||
|
|
||||||
use cuddle_clusters::{process::ProcessOpts, ConcreteComponent, IntoComponent};
|
use cuddle_clusters::{
|
||||||
|
process::{NoUploadStrategy, ProcessOpts},
|
||||||
|
ConcreteComponent, IntoComponent,
|
||||||
|
};
|
||||||
use walkdir::DirEntry;
|
use walkdir::DirEntry;
|
||||||
|
|
||||||
pub(crate) async fn run_test_with_components(
|
pub(crate) async fn run_test_with_components(
|
||||||
@ -29,6 +32,7 @@ pub(crate) async fn run_test_with_components(
|
|||||||
output: actual.clone(),
|
output: actual.clone(),
|
||||||
variables: HashMap::default(),
|
variables: HashMap::default(),
|
||||||
},
|
},
|
||||||
|
None::<NoUploadStrategy>,
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
@ -40,6 +44,7 @@ pub(crate) async fn run_test_with_components(
|
|||||||
output: expected.clone(),
|
output: expected.clone(),
|
||||||
variables: HashMap::default(),
|
variables: HashMap::default(),
|
||||||
},
|
},
|
||||||
|
None::<NoUploadStrategy>,
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user