#compose #container #proc-macro #deserialize

compose_spec_macros

用于compose_spec crate中的进程宏

1 个不稳定版本

0.1.0 2024年4月5日

1215进程宏

Download history 20/week @ 2024-05-03 7/week @ 2024-05-10 153/week @ 2024-05-17 124/week @ 2024-05-24 67/week @ 2024-05-31 63/week @ 2024-06-07 48/week @ 2024-06-14 49/week @ 2024-06-21 26/week @ 2024-06-28 32/week @ 2024-07-05 31/week @ 2024-07-12 26/week @ 2024-07-19 51/week @ 2024-07-26 35/week @ 2024-08-02 44/week @ 2024-08-09 15/week @ 2024-08-16

149 每月下载量
用于 2 个crate(通过 compose_spec

MPL-2.0 许可证

93KB
1.5K SLoC

compose_spec

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

compose_spec 是一个用于从/到 Compose规范 (反)序列化的Rust库crate。

compose_spec 力求实现

  • Rust风格 🦀
    • 使用标准库中语义合适的类型,如 PathBufDuration
  • 正确性
    • 值被完全验证和解析。
    • 对于相互冲突的字段使用枚举。例如,在 services 中,network_modenetworks 被合并为 network_config
  • 易用性
    • 完全文档化,尽管文档可以通过更多的示例和解释来完善,欢迎在这方面提供帮助!
    • 有用的函数,例如在多个表示形式(例如 buildports)的短和长语法形式之间进行转换。

请参阅文档以获取更多详细信息。

示例

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"));

最小支持的Rust版本(MSRV)

compose_spec 当前可以编译的最小Rust编译器版本是1.70,该版本已在CI中进行测试。增加MSRV被认为不是破坏性变更。

贡献

欢迎贡献、建议和/或评论!请自由创建 问题讨论pull request。通常,在提交带有pull request的更改之前,先开始一个关于功能请求的讨论或打开一个关于报告错误的issue是更好的选择。

项目布局

compose_spec 由两个在 Cargo 工作区中设置的包组成。根包 compose_spec 是主要库。另一个包 compose_spec_macros 位于同名的目录中,是用于 compose_spec 的过程宏库。compose_spec_macros 并非设计为在 compose_spec 库外部使用。

本地 CI

如果您在拉取请求中提交代码更改并希望本地运行 CI 任务,请使用以下命令

  • 格式化:cargo fmt --check --all
  • clippy:cargo clippy --workspace --tests
  • 测试:cargo test --workspace -- --include-ignored
  • 文档:cargo doc --workspace --document-private-items
  • docs-rs
    • 安装 nightly Rust 工具链:rustup toolchain install nightly
    • 安装 cargo-docs-rs
    • cargodocs-rs
  • 拼写检查
  • msrv
  • 最小版本
    • 安装 nightly Rust 工具链:rustup toolchain install nightly
    • 安装 cargo-hack
    • 安装 cargo-minimal-versions
    • cargo最小版本检查 --工作区
    • cargo最小版本测试 --工作区

许可证

compose_spec 的所有源代码均受 Mozilla 公共许可证 v2.0 许可。有关更多信息,请查看 LICENSE 文件。

Compose 规范本身受 Apache 许可证 v2.0 许可。有关更多信息,请查看该项目的 LICENSE 文件。

依赖

~270–720KB
~17K SLoC