dynomite/seeds/simple.rs
1//! `SimpleSeedsProvider` - the default, in-memory provider.
2//!
3//! Returns the seeds parsed at YAML load time. Mirrors the
4//! reference engine's behaviour when `dyn_seed_provider:` is set
5//! to `simple_provider` (or unset): the seeds list comes straight
6//! from `dyn_seeds:`.
7//!
8//! # Examples
9//!
10//! ```
11//! use dynomite::seeds::{simple::SimpleSeedsProvider, SeedsProvider};
12//! use dynomite::conf::ConfDynSeed;
13//! let s = vec![ConfDynSeed::parse("h:1:r:d:1").unwrap()];
14//! let p = SimpleSeedsProvider::new(s);
15//! assert_eq!(p.get_seeds().unwrap().len(), 1);
16//! ```
17
18use crate::conf::ConfDynSeed;
19use crate::seeds::{SeedsError, SeedsProvider};
20
21/// Static seeds provider.
22#[derive(Clone, Debug, Default)]
23pub struct SimpleSeedsProvider {
24 seeds: Vec<ConfDynSeed>,
25}
26
27impl SimpleSeedsProvider {
28 /// Build a provider from a fixed seeds list.
29 ///
30 /// # Examples
31 ///
32 /// ```
33 /// use dynomite::seeds::simple::SimpleSeedsProvider;
34 /// let p = SimpleSeedsProvider::new(Vec::new());
35 /// assert!(p.seeds().is_empty());
36 /// ```
37 #[must_use]
38 pub fn new(seeds: Vec<ConfDynSeed>) -> Self {
39 Self { seeds }
40 }
41
42 /// Borrow the seeds list.
43 #[must_use]
44 pub fn seeds(&self) -> &[ConfDynSeed] {
45 &self.seeds
46 }
47}
48
49impl SeedsProvider for SimpleSeedsProvider {
50 fn get_seeds(&self) -> Result<Vec<ConfDynSeed>, SeedsError> {
51 Ok(self.seeds.clone())
52 }
53}
54
55#[cfg(test)]
56mod tests {
57 use super::*;
58
59 #[test]
60 fn round_trip() {
61 let s = vec![
62 ConfDynSeed::parse("h1:1:r:d:1").unwrap(),
63 ConfDynSeed::parse("h2:2:r:d:2").unwrap(),
64 ];
65 let p = SimpleSeedsProvider::new(s);
66 let got = p.get_seeds().unwrap();
67 assert_eq!(got.len(), 2);
68 assert_eq!(got[0].host(), "h1");
69 }
70}