Make public Setup interface async

This commit is contained in:
Adrian Heine 2020-09-02 14:53:50 +02:00
parent 2d3e3688fa
commit d173198729
3 changed files with 50 additions and 57 deletions

View file

@ -36,7 +36,7 @@ macro_rules! add_generic {
#[allow(unused)]
async fn add_generic(&self, ($($name,)*): ($($name,)*)) -> Result<(($($name::Artifact,)*), bool), Box<dyn Error>>
{
let x: Result<_, Box<dyn Error>> = try_join!($(self.add_async($name, false),)*);
let x: Result<_, Box<dyn Error>> = try_join!($(self.add_force($name, false),)*);
let ($($name,)*) = x?;
Ok((($($name.0,)*), false $(|| $name.1)*))
}
@ -66,7 +66,7 @@ where
async fn add_generic(&self, r: Option<T>) -> AddResult<Option<T>> {
Ok(match r {
Some(r) => {
let (result, did_run) = self.add_async(r, false).await?;
let (result, did_run) = self.add_force(r, false).await?;
(Some(result), did_run)
}
None => (None, false),
@ -89,7 +89,7 @@ where
RegularSetupCore<SR, L, B>: 'static + SetupCore<T, Self>,
{
async fn add_generic(&self, r: T) -> AddResult<T> {
self.add_async(r, false).await
self.add_force(r, false).await
}
}

View file

@ -2,7 +2,6 @@ use super::core::{RegularSetupCore, SetupCore};
use super::runnable::Runnable;
use super::util::{AddResult, AddableResource};
use super::SymbolRunner;
use crate::async_utils::run;
use crate::loggers::Logger;
use crate::resources::{DefaultArtifacts, DefaultResources, FromArtifact, FromResource};
use crate::{DefaultBuilder, DefaultLocator};
@ -65,7 +64,7 @@ impl<
self.0.resources.borrow_mut()
}
pub(super) async fn add_async<R: AddableResource>(
pub async fn add_force<R: AddableResource>(
&self,
resource: R,
force_run: bool,
@ -117,37 +116,28 @@ impl<
//
// Legacy
//
pub fn add<R: AddableResource>(&self, resource: R) -> AddResult<R>
pub async fn add<R: AddableResource>(&self, resource: R) -> AddResult<R>
where
RegularSetupCore<SR, L, B>: SetupCore<R, Self>,
Rs: FromResource<R>,
As: FromArtifact<R> + Clone,
R::Artifact: Clone,
{
run(self.add_async(resource, false))
self.add_force(resource, false).await
}
pub fn add_force<R: AddableResource>(&self, resource: R, force_run: bool) -> AddResult<R>
where
RegularSetupCore<SR, L, B>: SetupCore<R, Self>,
Rs: FromResource<R>,
As: FromArtifact<R> + Clone,
R::Artifact: Clone,
{
run(self.add_async(resource, force_run))
}
pub fn run_symbol<S: Runnable>(&self, symbol: S, force: bool) -> Result<bool, Box<dyn Error>>
pub async fn run_symbol<S: Runnable>(&self, symbol: S, force: bool) -> Result<bool, Box<dyn Error>>
where
RegularSetupCore<SR, L, B>: SymbolRunner,
{
run(symbol.run(&self.0.core, &self.0.logger, force))
symbol.run(&self.0.core, &self.0.logger, force).await
}
}
#[cfg(test)]
mod test {
use super::SymbolRunner;
use crate::async_utils::run;
use crate::loggers::{Logger, StoringLogger};
use crate::resources::{FromArtifact, FromResource, Resource};
use crate::symbols::Symbol;
@ -287,14 +277,16 @@ mod test {
#[test]
fn correctly_uses_force() {
let (count, setup) = get_setup();
setup.add(TestResource("A", "b")).unwrap();
assert_eq!(*count.borrow(), 2);
setup.add(TestResource("A", "b")).unwrap();
assert_eq!(*count.borrow(), 2);
run(async {
let (count, setup) = get_setup();
setup.add(TestResource("A", "b")).await.unwrap();
assert_eq!(*count.borrow(), 2);
setup.add(TestResource("A", "b")).await.unwrap();
assert_eq!(*count.borrow(), 2);
let (count, setup) = get_setup();
setup.add(TestResource("A", "B")).unwrap();
assert_eq!(*count.borrow(), 0);
let (count, setup) = get_setup();
setup.add(TestResource("A", "B")).await.unwrap();
assert_eq!(*count.borrow(), 0);
});
}
}