1use core::fmt;
2use std::str::FromStr;
3pub(crate) mod constants;
4pub mod error;
5pub(crate) mod wallet;
6
7pub mod signer;
8
9pub use wallet::handlers::cooperative_exit::{CompleteCoopExitInput, RequestCoopExitInput};
11pub use wallet::SparkSdk;
12
13pub(crate) mod common_types;
14
15#[cfg(any(test, feature = "integration-tests"))]
16pub mod spark_test_utils;
17
18pub mod rpc;
19
20#[derive(Debug, Copy, PartialEq, Eq, PartialOrd, Ord, Clone, Hash)]
22#[non_exhaustive]
23pub enum SparkNetwork {
24 Mainnet,
26
27 Regtest,
29}
30
31impl SparkNetwork {
32 pub fn to_bitcoin_network(&self) -> ::bitcoin::Network {
33 match self {
34 SparkNetwork::Mainnet => ::bitcoin::Network::Bitcoin,
35 SparkNetwork::Regtest => ::bitcoin::Network::Regtest,
36 }
37 }
38
39 pub fn marshal_proto(&self) -> i32 {
40 match self {
41 SparkNetwork::Mainnet => spark_protos::spark::Network::Mainnet as i32,
42 SparkNetwork::Regtest => spark_protos::spark::Network::Regtest as i32,
43 }
44 }
45}
46
47impl FromStr for SparkNetwork {
48 type Err = String;
49
50 fn from_str(s: &str) -> Result<Self, String> {
51 match s.to_lowercase().as_str() {
52 "mainnet" => Ok(SparkNetwork::Mainnet),
53 "regtest" => Ok(SparkNetwork::Regtest),
54 _ => Err(format!("Invalid network: {}", s)),
55 }
56 }
57}
58
59impl fmt::Display for SparkNetwork {
60 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
61 match self {
62 SparkNetwork::Mainnet => write!(f, "mainnet"),
63 SparkNetwork::Regtest => write!(f, "regtest"),
64 }
65 }
66}
67
68#[cfg(test)]
69mod tests {
70 use std::str::FromStr as _;
71
72 use crate::SparkNetwork;
73
74 #[test]
75 fn test_spark_network_display() {
76 let network = SparkNetwork::Mainnet;
77 assert_eq!(network.to_string(), "mainnet");
78
79 let network = SparkNetwork::Regtest;
80 assert_eq!(network.to_string(), "regtest");
81 }
82
83 #[test]
84 fn test_spark_network_from_str() {
85 let network = SparkNetwork::from_str("mainnet").unwrap();
86 assert_eq!(network, SparkNetwork::Mainnet);
87 let network = SparkNetwork::from_str("Mainnet").unwrap();
88 assert_eq!(network, SparkNetwork::Mainnet);
89
90 let network = SparkNetwork::from_str("regtest").unwrap();
91 assert_eq!(network, SparkNetwork::Regtest);
92 let network = SparkNetwork::from_str("Regtest").unwrap();
93 assert_eq!(network, SparkNetwork::Regtest);
94
95 let network = SparkNetwork::from_str("testnet");
96 assert!(network.is_err());
97 }
98}