img-gen-spec 0.2.1

An API to create image generator specifications
Documentation
# `img-gen-spec`

The specifications used to generate images.

This crate provides an API to create a deterministic structure for generating images.
It does not generate images on its own. Rather, this crate's API is used as a parameter
to the `Generator` API in [`img-gen-renderer`][render-crate] crate.

## Examples

The easiest way to use this API is to deserialize a YAML or JSON string.

```rust
use img_gen_spec::Layout;
use serde::Deserialize;

let yaml_str = r##"
layers:
  - background:
      color: "#4051b5"
    typography:
      content: Hello world
      align: center
      color: white
"##;
let layout: Layout = serde_saphyr::from_str(yaml_str).unwrap();
// now pass this `layout` to a supported image generator
```

You can of course use the API directly instead of deserialization.

```rust
use img_gen_spec::{Layout, Layer, Background, Typography, TypographyAlign};

let layout = Layout {
    layers: vec![
        Layer {
            background: Some(Background {
                color: SolidColor::from_str("#4051b5").unwrap().into(),
                ..Default::default()
            }),
            typography: Some(Typography {
                content: "Hello world".to_string(),
                align: TypographyAlign::Center,
                color: SolidColor::from_str("white").unwrap().into(),
                ..Default::default()
            }),
            ..Default::default()
        }
    ],
    ..Default::default()
};
// now pass this `layout` to a supported image generator
```

## History

Originally, this crate's API was inspired by the "Material for MkDocs" `social`
plugin. That `social` plugin was used to generate social media preview cards;
see [mkdocs-material `social` plugin docs][material-mkdocs-social].

Then the social plugin was ported into a Sphinx extension for the same purpose
(generate social media cards). But along the way, many more features were added;
see [sphinx-social-cards extension docs][sphinx-social-cards].

What this crate is today is the culmination of all this history distilled into
an API that details a specification for generating images (social media preview
cards or otherwise).

[render-crate]: https://crates.io/crates/img-gen-renderer
[material-mkdocs-social]: https://squidfunk.github.io/mkdocs-material/setup/setting-up-social-cards/
[sphinx-social-cards]: https://2bndy5.github.io/sphinx-social-cards