cueball_static_resolver/
lib.rs

1// Copyright 2019 Joyent, Inc.
2
3use std::sync::mpsc::Sender;
4
5use cueball::backend::*;
6use cueball::resolver::{BackendAddedMsg, BackendMsg, Resolver};
7
8pub struct StaticIpResolver {
9    backends: Vec<(BackendAddress, BackendPort)>,
10    pool_tx: Option<Sender<BackendMsg>>,
11    started: bool,
12}
13
14impl StaticIpResolver {
15    pub fn new(backends: Vec<(BackendAddress, BackendPort)>) -> Self {
16        StaticIpResolver {
17            backends,
18            pool_tx: None,
19            started: false,
20        }
21    }
22}
23
24impl Resolver for StaticIpResolver {
25    fn run(&mut self, s: Sender<BackendMsg>) {
26        if !self.started {
27            self.backends.iter().for_each(|b| {
28                let backend = Backend::new(&b.0, b.1);
29                let backend_key = srv_key(&backend);
30                let backend_msg = BackendMsg::AddedMsg(BackendAddedMsg {
31                    key: backend_key,
32                    backend,
33                });
34                s.send(backend_msg).unwrap();
35            });
36            self.pool_tx = Some(s);
37            self.started = true;
38        }
39    }
40}