1pub mod key;
20pub mod address;
21pub mod amount;
22pub mod base58;
23pub mod bip32;
24pub mod bip143;
25pub mod contracthash;
26pub mod hash;
27pub mod merkleblock;
28pub mod misc;
29pub mod psbt;
30pub mod taproot;
31pub mod uint;
32pub mod bip158;
33
34pub(crate) mod endian;
35
36use std::{error, fmt};
37
38use network;
39use consensus::encode;
40
41pub trait BitArray {
43 fn bit(&self, idx: usize) -> bool;
45
46 fn bit_slice(&self, start: usize, end: usize) -> Self;
48
49 fn mask(&self, n: usize) -> Self;
51
52 fn trailing_zeros(&self) -> usize;
54
55 fn zero() -> Self;
57
58 fn one() -> Self;
60}
61
62#[derive(Debug)]
65pub enum Error {
66 Encode(encode::Error),
68 Network(network::Error),
70 BlockBadProofOfWork,
72 BlockBadTarget,
74}
75
76impl fmt::Display for Error {
77 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
78 match *self {
79 Error::Encode(ref e) => fmt::Display::fmt(e, f),
80 Error::Network(ref e) => fmt::Display::fmt(e, f),
81 Error::BlockBadProofOfWork => f.write_str("block target correct but not attained"),
82 Error::BlockBadTarget => f.write_str("block target incorrect"),
83 }
84 }
85}
86
87impl error::Error for Error {
88 fn cause(&self) -> Option<&dyn error::Error> {
89 match *self {
90 Error::Encode(ref e) => Some(e),
91 Error::Network(ref e) => Some(e),
92 Error::BlockBadProofOfWork | Error::BlockBadTarget => None
93 }
94 }
95}
96
97#[doc(hidden)]
98impl From<encode::Error> for Error {
99 fn from(e: encode::Error) -> Error {
100 Error::Encode(e)
101 }
102}
103
104#[doc(hidden)]
105impl From<network::Error> for Error {
106 fn from(e: network::Error) -> Error {
107 Error::Network(e)
108 }
109}