k9withabone / compose_spec_rs

Rust library for (de)serializing from/to the compose-spec
https://crates.io/crates/compose_spec
Mozilla Public License 2.0
3 stars 0 forks source link
compose compose-spec containers docker docker-compose podman rust

compose_spec

Crates.io Version Crates.io MSRV docs.rs License GitHub Actions CI Workflow Status

compose_spec is a Rust library crate for (de)serializing from/to the Compose specification.

compose_spec strives for:

See the documentation for more details.

Examples

use compose_spec::{Compose, Service, service::Image};

let yaml = "\
services:
  caddy:
    image: docker.io/library/caddy:latest
    ports:
      - 8000:80
      - 8443:443
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - caddy-data:/data
volumes:
  caddy-data:
";

// Deserialize `Compose`
let compose: Compose = serde_yaml::from_str(yaml)?;

// Serialize `Compose`
let value = serde_yaml::to_value(&compose)?;

// Get the `Image` of the "caddy" service
let caddy: Option<&Service> = compose.services.get("caddy");
let image: &Option<Image> = &caddy.unwrap().image;
let image: &Image = image.as_ref().unwrap();

assert_eq!(image, "docker.io/library/caddy:latest");
assert_eq!(image.name(), "docker.io/library/caddy");
assert_eq!(image.tag(), Some("latest"));

Minimum Supported Rust Version (MSRV)

The minimum version of the Rust compiler compose_spec can currently compile with is 1.70, which is tested in CI. Increasing the MSRV is not considered to be a breaking change.

Contribution

Contributions, suggestions, and/or comments are appreciated! Feel free to create an issue, discussion, or pull request. Generally, it is preferable to start a discussion for a feature request or open an issue for reporting a bug before submitting changes with a pull request.

Project Layout

compose_spec is composed of two packages set up in a Cargo workspace. The root package, compose_spec, is the main library. The other package, compose_spec_macros, located in a directory of the same name, is a procedural macro library used in compose_spec. compose_spec_macros is not designed to be used outside the compose_spec library.

Local CI

If you are submitting code changes in a pull request and would like to run the CI jobs locally, use the following commands:

License

All source code for compose_spec is licensed under the Mozilla Public License v2.0. View the LICENSE file for more information.

The Compose specification itself is licensed under the Apache License v2.0. See that project's LICENSE file for more information.