#![cfg_attr(not(feature = "std"), no_std)]
#![cfg_attr(not(feature = "std"), feature(alloc))]
extern crate byteorder;
extern crate elastic_array;
extern crate hexutil;
#[cfg(not(feature = "std"))]
extern crate alloc;
#[cfg(feature = "std")]
#[macro_use]
extern crate lazy_static;
mod traits;
mod error;
mod rlpin;
mod untrusted_rlp;
mod stream;
mod compression;
mod common;
mod impls;
#[cfg(not(feature = "std"))]use alloc::vec::Vec;
#[cfg(not(feature = "std"))]use alloc::string::String;
#[cfg(feature = "std")] use std::borrow::Borrow;
#[cfg(not(feature = "std"))] use core::borrow::Borrow;
use elastic_array::ElasticArray1024;
pub use error::DecoderError;
pub use traits::{Decodable, Encodable, Compressible};
pub use untrusted_rlp::{UntrustedRlp, UntrustedRlpIterator, PayloadInfo, Prototype};
pub use rlpin::{Rlp, RlpIterator};
pub use stream::RlpStream;
pub use compression::RlpType;
pub const NULL_RLP: [u8; 1] = [0x80; 1];
pub const EMPTY_LIST_RLP: [u8; 1] = [0xC0; 1];
pub fn decode<T>(bytes: &[u8]) -> T where T: Decodable {
let rlp = Rlp::new(bytes);
rlp.as_val()
}
pub fn decode_list<T>(bytes: &[u8]) -> Vec<T> where T: Decodable {
let rlp = Rlp::new(bytes);
rlp.as_list()
}
pub fn encode<E>(object: &E) -> ElasticArray1024<u8> where E: Encodable {
let mut stream = RlpStream::new();
stream.append(object);
stream.drain()
}
pub fn encode_list<E, K>(object: &[K]) -> ElasticArray1024<u8> where E: Encodable, K: Borrow<E> {
let mut stream = RlpStream::new();
stream.append_list(object);
stream.drain()
}