Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -395,7 +395,7 @@ fn main() -> Result<()> {
storage_args,
bitimage_args,
} => {
let network = parse_network(&network);
let network = parse_network(&network)?;
Comment thread
oritwoen marked this conversation as resolved.
let transform = apply_bitimage_config(transform, &bitimage_args);
run_generate(source, transform, network, output, verbose, &storage_args)
}
Expand All @@ -409,7 +409,7 @@ fn main() -> Result<()> {
storage_args,
bitimage_args,
} => {
let network = parse_network(&network);
let network = parse_network(&network)?;
let transform = apply_bitimage_config(transform, &bitimage_args);
run_scan(source, transform, network, targets, output, &storage_args)
}
Expand Down Expand Up @@ -735,7 +735,7 @@ fn run_scan(
fn run_single(passphrase: &str, transform_type: TransformType, network: &str) -> Result<()> {
use vuke::transform::Input;

let net = parse_network(network);
let net = parse_network(network)?;
let deriver = KeyDeriver::with_network(net);
let transform = transform_type.create();

Expand Down
46 changes: 29 additions & 17 deletions src/network.rs
Original file line number Diff line number Diff line change
@@ -1,18 +1,22 @@
//! Bitcoin network configuration.

use anyhow::{bail, Result};
use bitcoin::Network;

/// Parse network string to Network enum.
pub fn parse_network(network: &str) -> Network {
///
/// Returns an error for unrecognized network names instead of silently
/// defaulting to mainnet.
pub fn parse_network(network: &str) -> Result<Network> {
match network.to_lowercase().as_str() {
"bitcoin" | "mainnet" | "main" => Network::Bitcoin,
"testnet" | "test" => Network::Testnet,
"signet" => Network::Signet,
"regtest" | "reg" => Network::Regtest,
_ => {
eprintln!("Unknown network: {}. Defaulting to Bitcoin.", network);
Network::Bitcoin
}
"bitcoin" | "mainnet" | "main" => Ok(Network::Bitcoin),
"testnet" | "test" => Ok(Network::Testnet),
"signet" => Ok(Network::Signet),
"regtest" | "reg" => Ok(Network::Regtest),
_ => bail!(
"unknown network '{}'. Valid options: bitcoin, testnet, signet, regtest",
network
),
}
}

Expand All @@ -21,13 +25,21 @@ mod tests {
use super::*;

#[test]
fn test_parse_network() {
assert_eq!(parse_network("bitcoin"), Network::Bitcoin);
assert_eq!(parse_network("mainnet"), Network::Bitcoin);
assert_eq!(parse_network("BITCOIN"), Network::Bitcoin);
assert_eq!(parse_network("testnet"), Network::Testnet);
assert_eq!(parse_network("signet"), Network::Signet);
assert_eq!(parse_network("regtest"), Network::Regtest);
assert_eq!(parse_network("unknown"), Network::Bitcoin); // default
fn test_parse_known_networks() {
assert_eq!(parse_network("bitcoin").unwrap(), Network::Bitcoin);
assert_eq!(parse_network("mainnet").unwrap(), Network::Bitcoin);
assert_eq!(parse_network("BITCOIN").unwrap(), Network::Bitcoin);
assert_eq!(parse_network("testnet").unwrap(), Network::Testnet);
assert_eq!(parse_network("signet").unwrap(), Network::Signet);
assert_eq!(parse_network("regtest").unwrap(), Network::Regtest);
}

#[test]
fn test_parse_unknown_network_returns_error() {
let result = parse_network("unknown");
assert!(result.is_err());
let msg = result.unwrap_err().to_string();
assert!(msg.contains("unknown network"));
assert!(msg.contains("Valid options"));
Comment thread
oritwoen marked this conversation as resolved.
}
}
Loading