1#![allow(incomplete_features)]
2#![cfg_attr(RUSTC_WITH_SPECIALIZATION, feature(specialization))]
3#![cfg_attr(RUSTC_NEEDS_PROC_MACRO_HYGIENE, feature(proc_macro_hygiene))]
4
5extern crate self as solana_sdk;
7
8#[cfg(feature = "full")]
9pub use signer::signers;
10pub use solana_program::*;
11
12pub mod account;
13pub mod account_utils;
14pub mod builtins;
15pub mod client;
16pub mod commitment_config;
17pub mod compute_budget;
18pub mod derivation_path;
19pub mod deserialize_utils;
20pub mod ed25519_instruction;
21pub mod entrypoint;
22pub mod entrypoint_deprecated;
23pub mod epoch_info;
24pub mod example_mocks;
25pub mod exit;
26pub mod feature;
27pub mod feature_set;
28pub mod fee;
29pub mod genesis_config;
30pub mod hard_forks;
31pub mod hash;
32pub mod inflation;
33pub mod keyed_account;
34pub mod log;
35pub mod native_loader;
36pub mod nonce_account;
37pub mod packet;
38pub mod poh_config;
39pub mod precompiles;
40pub mod program_utils;
41pub mod pubkey;
42pub mod quic;
43pub mod recent_blockhashes_account;
44pub mod reward_type;
45pub mod rpc_port;
46pub mod secp256k1_instruction;
47pub mod shred_version;
48pub mod signature;
49pub mod signer;
50pub mod system_transaction;
51pub mod timing;
52pub mod transaction;
53pub mod transaction_context;
54pub mod transport;
55pub mod wasm;
56
57pub use solana_sdk_macro::declare_deprecated_id;
59pub use solana_sdk_macro::declare_id;
81pub use solana_sdk_macro::pubkey;
97pub use solana_sdk_macro::pubkeys;
98#[rustversion::since(1.46.0)]
99pub use solana_sdk_macro::respan;
100
101#[macro_export]
103#[deprecated(
104 since = "1.4.3",
105 note = "program_stubs macro is obsolete and can be safely removed"
106)]
107macro_rules! program_stubs {
108 () => {};
109}
110
111#[macro_export]
114macro_rules! saturating_add_assign {
115 ($i:expr, $v:expr) => {{
116 $i = $i.saturating_add($v)
117 }};
118}
119
120#[macro_use]
121extern crate serde_derive;
122pub extern crate bs58;
123extern crate log as logger;
124
125#[macro_use]
126extern crate safecoin_frozen_abi_macro;
127
128#[cfg(test)]
129mod tests {
130 #[test]
131 fn test_saturating_add_assign() {
132 let mut i = 0u64;
133 let v = 1;
134 saturating_add_assign!(i, v);
135 assert_eq!(i, 1);
136
137 i = u64::MAX;
138 saturating_add_assign!(i, v);
139 assert_eq!(i, u64::MAX);
140 }
141}