formattable 0.0.3

Ergonomically support formatted output
Documentation
# formattable

Make it easy and ergonomic to provide formatted output.

## Usage

Make sure you enable/disable the appropriate <#features> for the functionality
you want.

### Basic

```rust
use formattable::Format;
use serde::Serialize;

// Have some data structure that can be serialized.
#[derive(Serialize)]
struct Foo;

// Instantiate a Format variant. Format is Copy, so it's easy to use and pass
// around.
let fmt = Format::Json;

// Write your data structure to a JSON string.
let foo = Foo;
fmt.to_string(&foo).unwrap();
```

### `clap` Integration

```rust
use clap::Parser;
use formattable::Format;
use serde::Serialize;

/// Demonstrate how to use `formattable` in a `clap`-based CLI.
///
/// This example just dumps the CLI arguments themselves as the selected format.
#[derive(Debug, Parser, Serialize)]
struct Cli {
    /// Select a format for output.
    #[clap(short, long, value_enum, default_value_t = Format::Json)]
    format: Format,
}

fn main() {
    let cli = Cli::parse();
    dbg!(&cli);

    println!("{}", cli.format.to_string(&cli).unwrap());
}
```

## Features

Unfortunately, not all the various serialization libraries used by `formattable`
support the same serialization capabilities. Therefore, depending on the enabled
features you may or may not have certain methods available on `Format`. When in
doubt, consult the docs.

* default [toml, json, yaml]
* clap - enables the `clap` CLI integration
* json - default; enables serialization to JSON
* yaml - default; enables serialization to YAML; disables `to_string_pretty`
* toml - default; enables serialization to TOML; disables `to_writer`