summaryrefslogtreecommitdiffstats
path: root/src/config/builder.rs
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2022-08-01 10:44:20 +0200
committerMatthias Beyer <mail@beyermatthias.de>2022-08-01 10:44:20 +0200
commit347e8f32c06baae732c97f9bb98cc05f5dab460d (patch)
tree287f82e2027722d4c4765a8b2b2f271c856ac4cf /src/config/builder.rs
parent77f3c55117e0f8c7b857c922f2d5f0560aff9369 (diff)
fixup! WIP: Rewrite to store loaders _and_ loaded configrethink
Diffstat (limited to 'src/config/builder.rs')
-rw-r--r--src/config/builder.rs41
1 files changed, 26 insertions, 15 deletions
diff --git a/src/config/builder.rs b/src/config/builder.rs
index 9e3cce9..3748921 100644
--- a/src/config/builder.rs
+++ b/src/config/builder.rs
@@ -92,21 +92,32 @@ impl<'source> AsyncConfigBuilder<'source> {
Config::build_from_async_builder(self).await
}
- pub(crate) async fn reload(&self) -> Result<Vec<ConfigObject<'source>>, SourceError> {
- use futures::stream::FuturesOrdered;
- use futures::stream::StreamExt;
- use futures::FutureExt;
- use itertools::Itertools;
+ pub(crate) async fn reload(&'source self) -> Result<Vec<ConfigObject<'source>>, SourceError> {
+ async fn do_load<'source>(builders: &'source Vec<Box<dyn AsyncConfigSource<'source>>>) -> Result<Vec<ConfigObject<'source>>, SourceError> {
+ let mut v = Vec::with_capacity(builders.len());
+ for cs in builders.iter() {
+ v.push(cs.load().await?);
+ }
+ Ok(v)
+ }
- self.overwrites_builders
- .iter()
- .map(|cs| async move { cs.load().await }.boxed())
- .chain(self.layers_builders.iter().map(|cs| async move { cs.load().await }.boxed()))
- .chain(self.defaults_builders.iter().map(|cs| async move { cs.load().await }.boxed()))
- .collect::<FuturesOrdered<_>>()
- .collect::<Vec<Result<ConfigObject<'source>, SourceError>>>()
- .await
- .into_iter()
- .collect()
+ let overwrites = do_load(&self.overwrites_builders);
+ let layers = do_load(&self.layers_builders);
+ let defaults = do_load(&self.defaults_builders);
+
+ let (mut overwrites, mut layers, mut defaults) =
+ futures::try_join!(overwrites, layers, defaults)?;
+
+ let mut v = Vec::with_capacity({
+ self.layers_builders.len()
+ + self.defaults_builders.len()
+ + self.overwrites_builders.len()
+ });
+
+ v.append(&mut overwrites);
+ v.append(&mut layers);
+ v.append(&mut defaults);
+
+ Ok(v)
}
}