fvm-std 1.0.0

tool for user to write contract which will be run in hyperchain with rust
Documentation
//! fvm-std is a crate that supply base tool for developer to write contract with RUST more convenient
//!
//! ### Types
//! Here some simple types that we provide for developers to write contract easier.
//! #### H256
//! `H256` is a 32-length bytes, in order to express block hash. There are methods implement
//!
//! ```ignore
//! fn as_ref(&self) -> &H256
//! pub const fn new(val: [u8; 32]) -> Self
//! pub fn to_hex_string(&self) -> String
//! ```
//!
//! #### H160
//! `H160` is a 20-length bytes, in order to express address, there are methods implement
//!
//! ```ignore
//! fn as_ref(&self) -> &H160
//! pub const fn new(val: [u8; 20]) -> Self
//! ```
//!
//! #### Address
//!
//! `Address` is a alias for `H160`, also a method implement
//!
//! ```ignore
//! pub fn to_hex_string(&self) -> String
//! ```
//!
//! ***Notice: `to_hex_string` is different to `to_string`, the latter will only print part of the content, if it is too long***
//!
//! #### Log level
//!
//! level for developer to use with event log. more details see in section [log](#Log)
//!
//! ```rust
//! // CRITICAL ERROR WARNING NOTICE INFO DEBUG
//! pub enum LogLevel {
//!     CRITICAL,
//!     ERROR,
//!     WARNING,
//!     NOTICE,
//!     INFO,
//!     DEBUG,
//! }
//! ```
//!
//! ### Log
//!
//! we have supplied several tool macros method for developer to print log in contract, include
//! `critical!()`, `error!()`, `warning!()`, `notice!()`, `info!()`, `debug!()`
//!
//! #### Demo
//!
//! ```ignore
//! pub fn add(&mut self) -> u64 {
//!     info!("info {}", "hello");
//!     warning!("warning {}", "hello");
//!     notice!("notice {}", "hello");
//!     1
//! }
//! ```
//!
//! ### Event
//!
//! supply event for developer used in contract.
//!
//! ```ignore
//! #[derive(Debug, Serialize)]
//! pub struct Event<T> where T: Serialize {
//!     address: Address,
//!     data: T,
//!     topics: Vec<H256>,
//! }
//! ```
//!
//! **demo**
//!
//! ```ignore
//! #[derive(Debug, Serialize)]
//! struct Temp {
//!     amount: u64,
//! }
//!
//!
//! #[storage]
//! pub struct SetHash {
//!     map: HyperMap<String, String>,
//! }
//!
//! #[contract]
//! impl SetHash {
//!     fn new() -> Self {
//!         Self { map: HyperMap::new() }
//!     }
//!
//!     pub fn set_hash(&mut self, key: String, value: String) {
//!         let temp = Temp { amount: 1 };
//!         let ev = Event::new(temp, "set_hash".to_string(), vec!["test".to_string()]);
//!         ev.emit();
//!         self.map.insert(key, value);
//!     }
//!
//!     pub fn get_hash(&mut self, key: String) -> &String {
//!         self.map.get(&key).unwrap()
//!     }
//! }
//!
//! ```

#![cfg_attr(not(any(feature = "std", test)), no_std)]
// #![feature(proc_macro_hygiene)]
// 在no-std中更为稳定的抛出panic信息
// #![feature(panic_info_message)]


extern crate alloc;

///The prelude module provides common data types in the contract, and introduces some functions in the rust core library.
pub mod prelude {
    pub use crate::types::{Address, H256};
    pub use alloc::boxed::Box;
    pub use alloc::str;
    pub use alloc::string::{self, String, ToString};
    pub use alloc::vec::Vec;
    pub use alloc::{format, vec};
    pub use core::cmp;
    pub use core::prelude::v1::*;
}


///The database module provides the interface to save the data in the contract to the chain and query the data from the chain.
///The runtime module provides an interface to interact with the chain in the contract
#[allow(dead_code)]
pub mod runtime;

///The types module provides common data types such as address, U128, hash, etc.
pub mod types;

/// The event module provides method to throw event in the contract.
pub mod event;


///The abi module provides serialization and deserialization methods for different data types in the contract
#[cfg(feature = "advance")]
pub mod advance;


#[cfg(any(not(feature = "advance"), doc))]
pub mod collections;

#[cfg(any(not(feature = "advance"), doc))]
pub mod normal;

#[cfg(any(not(feature = "advance"), doc))]
pub mod spread;

mod utils;
mod macros;