Skip to content

Commit 2b8fad9

Browse files
committed
Split out sections into helper functions
with_conf() is large, split out some of the variable creation sections into helper functions.
1 parent a06bfa4 commit 2b8fad9

File tree

1 file changed

+64
-51
lines changed

1 file changed

+64
-51
lines changed

node/src/lib.rs

Lines changed: 64 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -282,18 +282,7 @@ impl Node {
282282

283283
/// Launch the bitcoind process from the given `exe` executable with given [Conf] param and create/load the "default" wallet.
284284
pub fn with_conf<S: AsRef<OsStr>>(exe: S, conf: &Conf) -> anyhow::Result<Node> {
285-
let tmpdir =
286-
conf.tmpdir.clone().or_else(|| env::var("TEMPDIR_ROOT").map(PathBuf::from).ok());
287-
let work_dir = match (&tmpdir, &conf.staticdir) {
288-
(Some(_), Some(_)) => return Err(Error::BothDirsSpecified.into()),
289-
(Some(tmpdir), None) => DataDir::Temporary(TempDir::new_in(tmpdir)?),
290-
(None, Some(workdir)) => {
291-
fs::create_dir_all(workdir)?;
292-
DataDir::Persistent(workdir.to_owned())
293-
}
294-
(None, None) => DataDir::Temporary(TempDir::new()?),
295-
};
296-
285+
let work_dir = Self::init_work_dir(conf)?;
297286
let work_dir_path = work_dir.path();
298287
if !work_dir_path.exists() {
299288
panic!("work dir does not exist");
@@ -306,45 +295,9 @@ impl Node {
306295
let rpc_url = format!("http://{}", rpc_socket);
307296
debug!("rpc_url: {}", rpc_url);
308297

309-
let (p2p_args, p2p_socket) = match conf.p2p {
310-
P2P::No => (vec!["-listen=0".to_string()], None),
311-
P2P::Yes => {
312-
let p2p_port = get_available_port()?;
313-
let p2p_socket = SocketAddrV4::new(LOCAL_IP, p2p_port);
314-
let bind_arg = format!("-bind={}", p2p_socket);
315-
let args = vec![bind_arg];
316-
(args, Some(p2p_socket))
317-
}
318-
P2P::Connect(other_node_url, listen) => {
319-
let p2p_port = get_available_port()?;
320-
let p2p_socket = SocketAddrV4::new(LOCAL_IP, p2p_port);
321-
let bind_arg = format!("-bind={}", p2p_socket);
322-
let connect = format!("-connect={}", other_node_url);
323-
let mut args = vec![bind_arg, connect];
324-
if listen {
325-
args.push("-listen=1".to_string())
326-
}
327-
(args, Some(p2p_socket))
328-
}
329-
};
330-
331-
let (zmq_args, zmq_pub_raw_tx_socket, zmq_pub_raw_block_socket) = match conf.enable_zmq {
332-
true => {
333-
let zmq_pub_raw_tx_port = get_available_port()?;
334-
let zmq_pub_raw_tx_socket = SocketAddrV4::new(LOCAL_IP, zmq_pub_raw_tx_port);
335-
let zmq_pub_raw_block_port = get_available_port()?;
336-
let zmq_pub_raw_block_socket = SocketAddrV4::new(LOCAL_IP, zmq_pub_raw_block_port);
337-
let zmqpubrawblock_arg =
338-
format!("-zmqpubrawblock=tcp://0.0.0.0:{}", zmq_pub_raw_block_port);
339-
let zmqpubrawtx_arg = format!("-zmqpubrawtx=tcp://0.0.0.0:{}", zmq_pub_raw_tx_port);
340-
(
341-
vec![zmqpubrawtx_arg, zmqpubrawblock_arg],
342-
Some(zmq_pub_raw_tx_socket),
343-
Some(zmq_pub_raw_block_socket),
344-
)
345-
}
346-
false => (vec![], None, None),
347-
};
298+
let (p2p_args, p2p_socket) = Self::p2p_args(&conf.p2p)?;
299+
let (zmq_args, zmq_pub_raw_tx_socket, zmq_pub_raw_block_socket) =
300+
Self::zmq_args(conf.enable_zmq)?;
348301

349302
let stdout = if conf.view_stdout { Stdio::inherit() } else { Stdio::null() };
350303

@@ -459,6 +412,66 @@ impl Node {
459412
})
460413
}
461414

415+
fn init_work_dir(conf: &Conf) -> anyhow::Result<DataDir> {
416+
let tmpdir =
417+
conf.tmpdir.clone().or_else(|| env::var("TEMPDIR_ROOT").map(PathBuf::from).ok());
418+
let work_dir = match (&tmpdir, &conf.staticdir) {
419+
(Some(_), Some(_)) => return Err(Error::BothDirsSpecified.into()),
420+
(Some(tmpdir), None) => DataDir::Temporary(TempDir::new_in(tmpdir)?),
421+
(None, Some(workdir)) => {
422+
fs::create_dir_all(workdir)?;
423+
DataDir::Persistent(workdir.to_owned())
424+
}
425+
(None, None) => DataDir::Temporary(TempDir::new()?),
426+
};
427+
Ok(work_dir)
428+
}
429+
430+
fn p2p_args(p2p: &P2P) -> anyhow::Result<(Vec<String>, Option<SocketAddrV4>)> {
431+
match p2p {
432+
P2P::No => Ok((vec!["-listen=0".to_string()], None)),
433+
P2P::Yes => {
434+
let p2p_port = get_available_port()?;
435+
let p2p_socket = SocketAddrV4::new(LOCAL_IP, p2p_port);
436+
let bind_arg = format!("-bind={}", p2p_socket);
437+
let args = vec![bind_arg];
438+
Ok((args, Some(p2p_socket)))
439+
}
440+
P2P::Connect(other_node_url, listen) => {
441+
let p2p_port = get_available_port()?;
442+
let p2p_socket = SocketAddrV4::new(LOCAL_IP, p2p_port);
443+
let bind_arg = format!("-bind={}", p2p_socket);
444+
let connect = format!("-connect={}", other_node_url);
445+
let mut args = vec![bind_arg, connect];
446+
if *listen {
447+
args.push("-listen=1".to_string())
448+
}
449+
Ok((args, Some(p2p_socket)))
450+
}
451+
}
452+
}
453+
454+
fn zmq_args(
455+
enable_zmq: bool,
456+
) -> anyhow::Result<(Vec<String>, Option<SocketAddrV4>, Option<SocketAddrV4>)> {
457+
if enable_zmq {
458+
let zmq_pub_raw_tx_port = get_available_port()?;
459+
let zmq_pub_raw_tx_socket = SocketAddrV4::new(LOCAL_IP, zmq_pub_raw_tx_port);
460+
let zmq_pub_raw_block_port = get_available_port()?;
461+
let zmq_pub_raw_block_socket = SocketAddrV4::new(LOCAL_IP, zmq_pub_raw_block_port);
462+
let zmqpubrawblock_arg =
463+
format!("-zmqpubrawblock=tcp://0.0.0.0:{}", zmq_pub_raw_block_port);
464+
let zmqpubrawtx_arg = format!("-zmqpubrawtx=tcp://0.0.0.0:{}", zmq_pub_raw_tx_port);
465+
Ok((
466+
vec![zmqpubrawtx_arg, zmqpubrawblock_arg],
467+
Some(zmq_pub_raw_tx_socket),
468+
Some(zmq_pub_raw_block_socket),
469+
))
470+
} else {
471+
Ok((vec![], None, None))
472+
}
473+
}
474+
462475
/// Returns the rpc URL including the schema eg. http://127.0.0.1:44842
463476
pub fn rpc_url(&self) -> String { format!("http://{}", self.params.rpc_socket) }
464477

0 commit comments

Comments
 (0)