keon 0.2.0

A human readable object notation that syntactic similar to Rust and fully supports Serde's data model.
Documentation
use super::*;
use serde::{Serialize, Serializer};
use std::io::Write;

impl Value {
    pub fn to_string(&self) -> Result<String> {
        to_string(self)
    }
    pub fn to_string_pretty(&self) -> Result<String> {
        to_string_pretty(self)
    }
    pub fn to_writer<W: Write>(&self, writer: W) -> Result<()> {
        to_writer(writer, self)
    }
    pub fn to_writer_pretty<W: Write>(&self, writer: W) -> Result<()> {
        to_writer_pretty(writer, self)
    }
}

impl Serialize for Value {
    fn serialize<S: Serializer>(&self, ser: S) -> core::result::Result<S::Ok, S::Error> {
        match self {
            Value::Unit => ser.serialize_unit(),
            Value::Bool(b) => ser.serialize_bool(*b),
            Value::Char(ch) => ser.serialize_char(*ch),
            Value::Number(num) => match num {
                Number::Int(i) => ser.serialize_i64(*i),
                Number::UInt(u) => ser.serialize_u64(*u),
                Number::Float(f) => ser.serialize_f64(*f),
            },
            Value::String(s) => ser.serialize_str(s),
            Value::Bytes(bytes) => ser.serialize_bytes(bytes),
            Value::Newtype(v) => ser.serialize_newtype_struct("", v),
            Value::Opt(opt) => match opt {
                Some(v) => ser.serialize_some(v),
                None => ser.serialize_none(),
            },
            Value::Seq(seq) => ser.collect_seq(seq),
            Value::Map(map) => ser.collect_map(map),
        }
    }
}