WARNING: This is an API preview! Most code won't work or even type check properly!
This crate defines the encoding traits and schemas for the Interchain SDK which can be used in message parameter and return types, serializable structs and enums, and objects in storage.
Basic Types
The basic types supported intrinsically are:
- [
u8], [u16], [u32], [u64], [u128] - [
i8], [i16], [i32], [i64], [i128] - [
bool] - [
String] or [str] - [
interchain_message_api::Address] - [
simple_time::Time] and [simple_time::Duration] - [
Option<T>] whereTis any supported type (except for anotherOption) - [
Vec<T>] and&[T]whereTis any supported type (except for anotherVecor&[T])
Custom types may be derived using the [StructCodec], [EnumCodec] and [OneOfCodec] trait
derive macros.
Depending on which context values are declared in, they may or may not need to be borrowed.
For instance, if we are using str as a function parameter, we must actually borrow it as &str.
The rules for this are as follows:
- if the type is a function parameter or struct field, it must implement [
value::MaybeBorrowed] and can be borrowed as long as there is some implicit or explicit lifetime parameter available - some generic types will require (such as
interchain_core::Responseandstate_objects::Item) require [value::Value] instead and these types can't be borrowed explicitly even if the underlying implementation uses borrowing, (ex. we must writeItem<str>instead ofItem<&str>even thoughItem.get()andItem.set()actually take&str)
Protobuf Mapping
The following table shows how Rust types are mapped to Protobuf types. Note that some types will have both a default and alternate mapping.
| Rust Type | Protobuf Type(s) | Notes |
|---|---|---|
u8 |
uint32 |
|
u16 |
uint32 |
|
u32 |
uint32 |
|
u64 |
uint64 |
|
u128 |
string |
|
i8 |
int32 |
|
i16 |
int32 |
|
i32 |
int32 |
|
i64 |
int64 |
|
i128 |
string |
|
bool |
bool |
|
str |
string |
|
String |
string |
|
Address |
string, alternate bytes |
uses an address codec for string conversion |
Time |
google.protobuf.Timestamp |
|
Duration |
google.protobuf.Duration |