kserd 0.5.0

Kurt's Self-Explanatory Rust Data
Documentation
[![Build Status](https://github.com/kurtlawrence/kserd/workflows/Rust/badge.svg)](https://github.com/kurtlawrence/kserd/actions)
[![Latest Version](https://img.shields.io/crates/v/kserd.svg)](https://crates.io/crates/kserd)
[![Rust Documentation](https://img.shields.io/badge/api-rustdoc-blue.svg)](https://docs.rs/kserd)
[![codecov](https://codecov.io/gh/kurtlawrence/kserd/branch/master/graph/badge.svg)](https://codecov.io/gh/kurtlawrence/kserd)

**K**urt's **S**elf **E**xplanatory **R**ust **D**ata.

See the [rs docs.](https://docs.rs/kserd/)
Look at progress and contribute on [github.](https://github.com/kurtlawrence/kserd)

## Introduction
`kserd` provides a data structure to represent programmatic data (mainly for Rust). Data is held in
enum variants covering the basic primitives along with nested structures such as tuples,
containers, sequences, and maps. `kserd` tries to differentiate itself by providing the data
structure as the in-memory intermediary between serialized format and a programming language's
structure. The serialized format is inspired by TOML to make `kserd` as human-readable as possible.

## Getting Started
With default features enabled, using `kserd` is a simple as importing the root which will contain
all the important items.

```rust
use kserd::*;

# #[cfg(feature = "encode")] {
// Kserd and Value are the building blocks of the data.
let mut kserd = Kserd::with_id("greeting", Value::new_str("Hello")).unwrap();

// Kserd/Value are meant to be useable in their memory form
// not just simple data holding structure!
assert_eq!(kserd.str(), Some("Hello"));

// you can mutate in place as well
kserd.str_mut().map(|s| { s.push_str(", world!"); });
assert_eq!(kserd.str(), Some("Hello, world!"));

// encode data structures that implement serde::Serialize
let kserd = Kserd::enc(&vec![0, 1, 2, 4]).unwrap();

// can format the kserd into a human-readable string
println!("{}", kserd.as_str()); // should print [0, 1, 2, 4]
# }
```

It is recommended to consult the [api documentation](crate) as there is extensive examples and
explanations.

## Features

The kserd library is feature gated, but all features are enabled by default.

| Feature  | Description | Further reading |
| -------- | ----------- | --------------- |
| _encode_ | Convert data structures to and from `Kserd`. Makes use of `serde` `Serialize` and `Deserialize` traits. | [`kserd::encode`]crate::encode |
| _format_ | Format a `Kserd` to a human-readable string. | [`kserd::format`]crate::fmt |
| _parse_  | Parse a string into a `Kserd`. | [`kserd::parse`]crate::parse |