#docker-compose #compose #serialize-deserialize #yaml #serialization #strongly-typed #parser

docker-compose-types

Deserialization and Serialization of docker-compose.yml files in a relatively strongly typed fashion

32 releases (14 breaking)

0.15.0 Oct 3, 2024
0.13.0 Jul 19, 2024
0.7.2 Mar 1, 2024
0.7.0 Dec 12, 2023
0.1.5 Jul 5, 2021

#195 in Data structures

Download history 262/week @ 2024-07-22 754/week @ 2024-07-29 542/week @ 2024-08-05 185/week @ 2024-08-12 207/week @ 2024-08-19 518/week @ 2024-08-26 492/week @ 2024-09-02 547/week @ 2024-09-09 351/week @ 2024-09-16 503/week @ 2024-09-23 645/week @ 2024-09-30 548/week @ 2024-10-07 646/week @ 2024-10-14 587/week @ 2024-10-21 565/week @ 2024-10-28 540/week @ 2024-11-04

2,366 downloads per month
Used in 2 crates

MIT/Apache

39KB
925 lines

Docker Compose Types

crates.io

Contributions are very welcome, the idea behind this crate is to allow for safe serialization of docker-compose files with as little room for error as possible.

Example Usage

Parsing a docker-compose file

use docker_compose_types::Compose;

fn main() {
    let file_payload =
        std::fs::read_to_string("tests/fixtures/v3-full/docker-compose.yml").unwrap();
    let compose_content = match serde_yaml::from_str::<Compose>(&file_payload) {
        Ok(c) => c,
        Err(e) => panic!("Failed to parse docker-compose file: {}", e),
    };
    println!("Parsed docker-compose file: {:#?}", compose_content);
}

Creating a docker-compose file from the crate's types

use docker_compose_types::{Compose, Service, Services, SingleService};
use serde_yaml;

fn main() {
    let compose_content = Compose {
        version: Some("3.8".to_string()),
        services: {
            let mut services = indexmap::IndexMap::new();
            services.insert(
                "web".to_string(),
                Some(Service {
                    image: Some("nginx:latest".to_string()),
                    ..Default::default()
                }),
            );
            Some(Services(services))
        },
        ..Default::default()
    };

    let target_file = std::path::Path::new("docker-compose.yml");
    // serialize to string
    let serialized = match serde_yaml::to_string(&compose_content) {
        Ok(s) => s,
        Err(e) => panic!("Failed to serialize docker-compose file: {}", e),
    };
    // serialize to file
    std::fs::write(target_file, serialized).unwrap();
}

License

Licensed under either of Apache License, Version 2.0 or MIT license at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~1.6–2.7MB
~55K SLoC