spark_rust/
lib.rs

1use core::fmt;
2use std::str::FromStr;
3pub(crate) mod constants;
4pub mod error;
5pub(crate) mod wallet;
6
7pub mod signer;
8
9// pub use wallet::utils;
10pub 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/// Spark Network. This is the network of the Spark Operators that the user choose to connect to. Mainnet is the Bitcoin network, and all operations involve real money. Regtest is Ligthspark's Regtest network.
21#[derive(Debug, Copy, PartialEq, Eq, PartialOrd, Ord, Clone, Hash)]
22#[non_exhaustive]
23pub enum SparkNetwork {
24    /// Mainnet Bitcoin.
25    Mainnet,
26
27    /// Lightspark's Regtest network.
28    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}