use std::path::Path;
use async_trait::async_trait;
#[async_trait(?Send)]
pub trait Cloud {
type CloudResourcesRequired;
type CloudResources;
async fn cleanup_resources(&mut self);
async fn create_resources(
&mut self,
required_resources: Vec<Self::CloudResourcesRequired>,
benches_will_run: bool,
) -> Self::CloudResources;
async fn store_resources_file(&mut self, path: &Path, resources: Self::CloudResources);
async fn load_resources_file(
&mut self,
path: &Path,
required_resources: Vec<Self::CloudResourcesRequired>,
) -> Self::CloudResources;
fn order_benches(
&mut self,
benches: Vec<BenchInfo<Self::CloudResourcesRequired>>,
) -> Vec<BenchInfo<Self::CloudResourcesRequired>> {
benches
}
async fn adjust_resources(
&mut self,
_benches: &[BenchInfo<Self::CloudResourcesRequired>],
_bench_index: usize,
_resources: &mut Self::CloudResources,
) {
}
}
pub struct BenchInfo<CloudResourceRequired> {
pub name: String,
pub resources: CloudResourceRequired,
}
pub struct NoCloud;
impl NoCloud {
pub fn new_boxed() -> Box<dyn Cloud<CloudResourcesRequired = (), CloudResources = ()>>
where
Self: Sized,
{
Box::new(NoCloud)
}
}
#[async_trait(?Send)]
impl Cloud for NoCloud {
type CloudResourcesRequired = ();
type CloudResources = ();
async fn cleanup_resources(&mut self) {}
async fn create_resources(&mut self, _requests: Vec<()>, _benches_will_run: bool) {}
async fn store_resources_file(&mut self, _path: &Path, _resources: ()) {}
async fn load_resources_file(
&mut self,
_path: &Path,
_required_resources: Vec<Self::CloudResourcesRequired>,
) {
}
}