diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2022-08-01 10:44:20 +0200 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2022-08-01 10:44:20 +0200 |
commit | 347e8f32c06baae732c97f9bb98cc05f5dab460d (patch) | |
tree | 287f82e2027722d4c4765a8b2b2f271c856ac4cf /src/config/builder.rs | |
parent | 77f3c55117e0f8c7b857c922f2d5f0560aff9369 (diff) |
fixup! WIP: Rewrite to store loaders _and_ loaded configrethink
Diffstat (limited to 'src/config/builder.rs')
-rw-r--r-- | src/config/builder.rs | 41 |
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) } } |