iprs 0.0.4

Inter planetary specifications in rust-lang
Documentation
[![Documentation](https://docs.rs/iprs/badge.svg?style=flat-square)](https://docs.rs/iprs)

Multiformats
============

A collection of protocols which aim to future-proof systems, today.
They do this mainly by enhancing format values with self-description.
This allows interoperability, protocol agility, and helps us avoid
lock in.

The self-describing aspects of the protocols have a few stipulations:

* They MUST be **in-band** (with the value); not out-of-band (in context).
* They MUST avoid **lock-in** and promote extensibility.
* They MUST be **compact** and have a **binary-packed representation**.
* They MUST have a **human-readable representation**.

Unsigned-varint
---------------

VARiable INTeger format used in all the multiformats. The encoding is:

* Unsigned integers are serialized 7 bits at a time, starting with the
  least significant bits.
* The most significant bit (msb) in each output byte indicates if there
  is a continuation byte (msb = 1).
* There are no signed integers.
* Integers are minimally encoded.

Refer [unsigned-varint spec][unsigned-varint] for details.

Multibase
---------

Base encoding is converting binary-data to plain-text. There are several
base-encoding definitions that can convert binary-data to a small
subset of, typically, ASCII code. Purpose,

* Printable character set.
* A bridge to backward-compatibility.
* When a channel cannot, do-not, allow binary data.

Refer [multibase][multibase] for details.

Multicodec
----------

Multicodec is an agreed-upon codec table. It is designed for use in
binary representations, such as keys or identifiers (i.e [CID][CID]).
Find the canonical table of multicodecs at [table.csv].

Refer [multicodec spec][multicodec] for details.


**Reference**:

List of active multiformat specification(s).

* Micro-site, http://multiformats.io
* Unsigned varint, https://github.com/multiformats/unsigned-varint
* Multicodec, https://github.com/multiformats/multicodec

There are other implementations that can suite your need better:

* [rust implementation of multi-base][rust-multibase]

[unsigned-varint]: https://github.com/multiformats/unsigned-varint
[rust-multibase]: https://github.com/multiformats/rust-multibase
[multibase]: https://github.com/multiformats/multibase
[multicodec]: https://github.com/multiformats/multicodec
[CID]: https://github.com/ipld/cid
[multicodec-table]: https://github.com/multiformats/multicodec/blob/master/table.csv