Skip to main content

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}