#![deny(missing_docs)]
#![no_std]
extern crate alloc;
#[cfg(feature = "__std")]
extern crate std;
mod at;
mod macros;
mod prelude;
mod scale_impls;
#[cfg(feature = "serde")]
mod serde_impls;
mod string_impls;
mod value_type;
pub use at::{At, Location};
pub use value_type::{BitSequence, Composite, Primitive, Value, ValueDef, Variant};
#[cfg(feature = "serde")]
pub mod serde {
use crate::prelude::*;
pub use crate::serde_impls::{DeserializerError, SerializerError, ValueSerializer};
pub fn from_value<'de, Ctx, T: serde::Deserialize<'de>>(
value: crate::Value<Ctx>,
) -> Result<T, DeserializerError> {
T::deserialize(value)
}
pub fn to_value<T: serde::Serialize>(ty: T) -> Result<crate::Value<()>, SerializerError> {
ty.serialize(ValueSerializer)
}
}
pub mod scale {
use crate::prelude::*;
use scale_decode::FieldIter;
use scale_encode::EncodeAsType;
pub use crate::scale_impls::{DecodeError, ValueVisitor};
pub use scale_encode::Error as EncodeError;
pub use scale_type_resolver::TypeResolver;
pub fn decode_as_type<R>(
data: &mut &[u8],
ty_id: R::TypeId,
types: &R,
) -> Result<crate::Value<R::TypeId>, DecodeError>
where
R: TypeResolver,
R::TypeId: Clone,
{
crate::scale_impls::decode_value_as_type(data, ty_id, types)
}
pub fn decode_as_fields<'resolver, R>(
input: &mut &[u8],
fields: &mut dyn FieldIter<'resolver, R::TypeId>,
types: &'resolver R,
) -> Result<crate::Composite<R::TypeId>, DecodeError>
where
R: TypeResolver,
R::TypeId: Clone,
{
crate::scale_impls::decode_composite_as_fields(input, fields, types)
}
pub fn encode_as_type<R: TypeResolver, T>(
value: &crate::Value<T>,
ty_id: R::TypeId,
types: &R,
buf: &mut Vec<u8>,
) -> Result<(), EncodeError> {
value.encode_as_type_to(ty_id, types, buf)
}
pub mod tracing {
pub use crate::scale_impls::{TraceDecodingError, TraceDecodingVisitor};
pub fn decode_as_type<R>(
data: &mut &[u8],
ty_id: R::TypeId,
types: &R,
) -> Result<crate::Value<R::TypeId>, TraceDecodingError<crate::Value<R::TypeId>>>
where
R: scale_type_resolver::TypeResolver,
{
scale_decode::visitor::decode_with_visitor(
data,
ty_id,
types,
TraceDecodingVisitor::new(),
)
}
}
}
pub mod stringify {
use crate::prelude::*;
pub use crate::string_impls::ToWriterBuilder;
#[cfg(feature = "from-string")]
pub use crate::string_impls::{
FromStrBuilder, ParseBitSequenceError, ParseCharError, ParseComplexError, ParseError,
ParseErrorKind, ParseNumberError, ParseStringError,
};
#[cfg(feature = "from-string")]
pub mod custom_parsers {
#[cfg(feature = "parser-ss58")]
pub use crate::string_impls::parse_ss58;
pub use crate::string_impls::{parse_hex, ParseHexError};
}
pub mod custom_formatters {
pub use crate::string_impls::format_hex;
}
#[cfg(feature = "from-string")]
pub fn from_str(s: &str) -> (Result<crate::Value<()>, ParseError>, &str) {
crate::string_impls::FromStrBuilder::new().parse(s)
}
#[cfg(feature = "from-string")]
pub fn from_str_custom() -> FromStrBuilder {
crate::string_impls::FromStrBuilder::new()
}
pub fn to_string<T>(value: &crate::Value<T>) -> String {
value.to_string()
}
pub fn to_writer<T, W: core::fmt::Write>(
value: &crate::Value<T>,
writer: W,
) -> core::fmt::Result {
crate::string_impls::ToWriterBuilder::new().write(value, writer)
}
pub fn to_writer_custom<T, W: core::fmt::Write>() -> ToWriterBuilder<T, W> {
crate::string_impls::ToWriterBuilder::new()
}
}