// SPDX-License-Identifier: CC0-1.0 //! # Rust Bitcoin - primitive types //! //! Primitive data types that are used throughout the [`rust-bitcoin`] ecosystem. //! //! This crate can be used in a no-std environment but a lot of the functionality requires an //! allocator i.e., requires the `alloc` feature to be enabled. //! //! [`rust-bitcoin`]: #![cfg_attr(all(not(test), not(feature = "std")), no_std)] // Experimental features we need. #![cfg_attr(docsrs, feature(doc_auto_cfg))] // Coding conventions. #![warn(missing_docs)] #![warn(deprecated_in_future)] #![doc(test(attr(warn(unused))))] // Exclude lints we don't think are valuable. #![allow(clippy::uninlined_format_args)] // Allow `format!("{}", x)`instead of enforcing `format!("{x}")` #[cfg(feature = "alloc")] extern crate alloc; #[cfg(feature = "std")] extern crate std; #[cfg(feature = "serde")] #[macro_use] extern crate serde; #[doc(hidden)] pub mod _export { /// A re-export of `core::*`. pub mod _core { pub use core::*; } } pub mod block; pub mod locktime; pub mod merkle_tree; mod opcodes; pub mod pow; #[cfg(feature = "alloc")] pub mod script; pub mod sequence; pub mod transaction; #[cfg(feature = "alloc")] pub mod witness; #[doc(inline)] pub use units::{ amount::{self, Amount, SignedAmount}, block::{BlockHeight, BlockHeightInterval, BlockMtp, BlockMtpInterval}, fee_rate::{self, FeeRate}, time::{self, BlockTime}, weight::{self, Weight}, }; #[deprecated(since = "TBD", note = "use `BlockHeightInterval` instead")] #[doc(hidden)] pub type BlockInterval = BlockHeightInterval; #[doc(inline)] #[cfg(feature = "alloc")] pub use self::{ block::{ Block, Checked as BlockChecked, Unchecked as BlockUnchecked, Validation as BlockValidation, }, script::{Script, ScriptBuf}, transaction::{Transaction, TxIn, TxOut}, witness::Witness, }; #[doc(inline)] pub use self::{ block::{BlockHash, Header as BlockHeader, Version as BlockVersion, WitnessCommitment}, locktime::{absolute, relative}, merkle_tree::{TxMerkleNode, WitnessMerkleNode}, pow::CompactTarget, sequence::Sequence, transaction::{OutPoint, Txid, Version as TransactionVersion, Wtxid}, }; #[rustfmt::skip] #[allow(unused_imports)] mod prelude { #[cfg(feature = "alloc")] pub use alloc::collections::{BTreeMap, BTreeSet, btree_map, BinaryHeap}; #[cfg(feature = "alloc")] pub use alloc::{string::{String, ToString}, vec::Vec, boxed::Box, borrow::{Borrow, BorrowMut, Cow, ToOwned}, slice, rc}; #[cfg(all(feature = "alloc", target_has_atomic = "ptr"))] pub use alloc::sync; }