electrum/
lib.rs

1#![warn(missing_docs)]
2
3//! This library provides an extendable Bitcoin-Electrum client that supports batch calls,
4//! notifications and multiple transport methods.
5//!
6//! By default this library is compiled with support for SSL servers using [`rustls`](https://docs.rs/rustls) and support for
7//! plaintext connections over a socks proxy, useful for Onion servers. Using different features,
8//! the SSL implementation can be removed or replaced with [`openssl`](https://docs.rs/openssl).
9//!
10//! A `minimal` configuration is also provided, which only includes the plaintext TCP client.
11//!
12//! # Example
13//!
14//! ```no_run
15//! use electrum::{Client, ElectrumApi};
16//!
17//! let mut client = Client::new("tcp://electrum.blockstream.info:50001")?;
18//! let response = client.server_features()?;
19//! # Ok::<(), electrum::Error>(())
20//! ```
21
22extern crate core;
23extern crate log;
24#[cfg(feature = "use-openssl")]
25extern crate openssl;
26#[cfg(all(
27    any(
28        feature = "default",
29        feature = "use-rustls",
30        feature = "use-rustls-ring"
31    ),
32    not(feature = "use-openssl")
33))]
34extern crate rustls;
35extern crate serde;
36extern crate serde_json;
37
38#[cfg(any(
39    feature = "default",
40    feature = "use-rustls",
41    feature = "use-rustls-ring"
42))]
43extern crate webpki_roots;
44
45#[cfg(any(feature = "default", feature = "proxy"))]
46extern crate byteorder;
47
48extern crate amplify;
49extern crate bp;
50#[cfg(all(unix, any(feature = "default", feature = "proxy")))]
51extern crate libc;
52extern crate sha2;
53#[cfg(all(windows, any(feature = "default", feature = "proxy")))]
54extern crate winapi;
55
56#[cfg(any(feature = "default", feature = "proxy"))]
57pub mod socks;
58
59mod api;
60mod batch;
61
62#[cfg(any(
63    all(feature = "proxy", feature = "use-openssl"),
64    all(feature = "proxy", feature = "use-rustls"),
65    all(feature = "proxy", feature = "use-rustls-ring")
66))]
67pub mod client;
68
69mod config;
70
71pub mod raw_client;
72mod stream;
73mod types;
74#[cfg(test)]
75pub mod utils;
76
77pub use api::ElectrumApi;
78pub use batch::Batch;
79#[cfg(any(
80    all(feature = "proxy", feature = "use-openssl"),
81    all(feature = "proxy", feature = "use-rustls"),
82    all(feature = "proxy", feature = "use-rustls-ring")
83))]
84pub use client::*;
85pub use config::{Config, ConfigBuilder, Socks5Config};
86pub use types::*;