bitcoin_slices 0.11.0

Parse Bitcoin objects without allocations
#![cfg_attr(docsrs, feature(doc_auto_cfg))]
#![deny(missing_docs)]
#![cfg_attr(not(test), no_std)]
#![warn(missing_docs)]
#![doc = include_str!("../README.md")]

pub mod bsl;
mod error;
pub mod number;
mod parse_result;
mod slice;
mod visit;

#[cfg(feature = "slice_cache")]
mod slice_cache;

#[cfg(feature = "slice_cache")]
#[macro_use]
extern crate alloc;

#[cfg(feature = "slice_cache")]
pub use slice_cache::SliceCache;

pub use error::Error;
pub use parse_result::ParseResult;

#[allow(deprecated)]
pub use slice::read_slice;

pub use visit::{EmptyVisitor, Parse, Visit, Visitor};

/// Common result type throughout the lib
pub type SResult<'a, T> = Result<ParseResult<'a, T>, Error>;

#[cfg(feature = "bitcoin_hashes")]
pub use bitcoin_hashes;

#[cfg(feature = "sha2")]
pub use sha2;

#[cfg(feature = "redb")]
pub use redb;

#[cfg(feature = "bitcoin")]
pub use bitcoin;

#[cfg(test)]
pub mod test_common {
    use hex_lit::hex;

    use crate::ParseResult;

    pub const GENESIS_TX: [u8; 204] = hex!("01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000");
    pub const GENESIS_BLOCK_HEADER: [u8; 80] = hex!("0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f49ffff001d1dac2b7c");
    pub const GENESIS_BLOCK: [u8;285] = hex!("0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f49ffff001d1dac2b7c0101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000");

    impl<'a, T: AsRef<[u8]>> ParseResult<'a, T> {
        pub fn new_exact(parsed: T) -> Self {
            ParseResult::new(&[], parsed)
        }
    }

    pub fn reverse(arr: [u8; 32]) -> [u8; 32] {
        let mut ret = arr;
        ret.reverse();
        ret
    }
}