stencila-schema 1.15.0

Rust bindings for Stencila Schema
Documentation
# Stencila Schema for Rust

[![Build Status](https://dev.azure.com/stencila/stencila/_apis/build/status/stencila.schema?branchName=master)](https://dev.azure.com/stencila/stencila/_build/latest?definitionId=9&branchName=master)
[![Crates.io](https://img.shields.io/crates/v/stencila-schema)](https://crates.io/crates/stencila-schema)
[![Docs](https://img.shields.io/badge/docs-latest-blue.svg)](https://docs.rs/stencila-schema/latest/stencila_schema/)

This crate provides Rust bindings for the [Stencila Schema](https://schema.stenci.la). It is primarily aimed at Rust developers wanting to programmatically generate or modify documents, particularly executable documents. For example, it is used in the [Stencila Rust library](https://github.com/stencila/stencila/tree/master/rust).

## Install

```sh
cargo add stencila_schema
```

## Use

This package exports a `struct` for each type of document node in the Stencila Schema e.g. `Article`, `Paragraph`, `CodeChunk`.

Note that all node properties e.g. `familyNames` are made snake case e.g. `family_names` for consistency with Rust conventions.

```rust
let article = Article {
    title: Some(ArticleTitle::String("The article title".into())),
    authors: Some(vec![ArticleAuthors::Person({
        Person {
            given_names: Some(vec!["Jane".into()]),
            family_names: Some(vec!["Jones".into()]),
            ..Default::default()
        }
    })]),
    content: Some(vec![BlockContent::Paragraph(Paragraph {
        content: vec![
            InlineContent::String("A paragraph with a ".into()),
            InlineContent::CodeExpression(CodeExpression {
                programming_language: Some("r".into()),
                text: "2^2".into(),
                ..Default::default()
            }),
        ],
        ..Default::default()
    })]),
    ..Default::default()
};
```

## Develop

Get started by cloning this repository and using `cargo` to run the tests,

```bash
git clone git@github.com:stencila/schema
cd schema/rust
cargo test
```

Of course, you need to have Rust [installed](https://rustup.rs). If you want to re-generate `src/types.rs`, you'll also need to have Node.js installed (to generate the Rust code from the schema's YAML files).