#protobuf #database-schema #schema #awto #macro

awto-compile

编译使用 Awto 构建的微服务

3 个版本

0.1.2 2021年10月21日
0.1.1 2021年10月18日
0.1.0 2021年10月17日

数据库接口 中排名第 2473

MIT/Apache

60KB
1.5K SLoC

awto

使用 awto 自动化你的 🦀 微服务

crate

什么是 awto?

Awto 将你的 Rust 项目视为微服务的真相来源,并根据你的架构和服务生成 数据库表protobuf

数据库生成

  • 数据库表是从你的 Rust 结构体生成的
  • 检测到你的结构体的更改,并将相应地修改表架构

Protobuf 生成

  • 从你的模型生成 protobuf 架构
  • 从你的应用程序服务编译 protobuf 服务器

概念

使用 awto,你为每个微服务创建一个 Cargo 工作空间。在你的工作空间下,你创建两个库:schemaservice

架构

架构库的目的是定义你的微服务模型,这些模型将用于生成数据库表。

// schema/src/lib.rs
use awto::prelude::*;

schema! {
    #[database_table]
    #[protobuf_message]
    pub struct Product {
        pub id: Uuid,
        pub created_at: DateTime<FixedOffset>,
        pub updated_at: DateTime<FixedOffset>,
        pub name: String,
        #[awto(max_len = 120)]
        pub description: Option<String>,
        #[awto(default = 0)]
        pub price: i64,
    }
}

请参阅 examples/ecom 中的示例架构。

服务

服务库是你编写业务逻辑的地方。这种业务逻辑可以稍后用于创建 protobuf API(并在未来创建 graphql API)。

// service/src/lib.rs

register_services!(ProductService);

pub struct ProductService {
    pub conn: DatabaseConnection,
}

#[protobuf_service]
impl ProductService {
    pub async fn find_by_id(&self, request: ProductId) -> Result<Product, Status> {
        let product = product::Entity::find_by_id(request.id)
            .one(&self.conn)
            .await
            .map_err(|err| Status::internal(err.to_string()))?
            .ok_or_else(|| Status::not_found("product not found"))?;

        Ok(product.into())
    }
}

请参阅 examples/ecom 中的示例服务。

Cargo 工作空间

你的架构和服务库应在 cargo 工作空间下。

# root Cargo.toml
[workspace]
members = ["schema", "service"]

请参阅 examples/ecom 中的示例项目。

Awto CLI

Awto 提供了一个 CLI,用于使用 awto compile <lib> 命令生成额外的库。目前可用的库有

  • database —— 基于 SeaORM,为你的服务提供数据库库
  • protobuf —— 基于 tonic,提供 protobuf 服务器库

安装

可以使用以下方式安装 CLI

cargo install awto-cli

这将提供一个名为 awto 的二进制文件。

使用 awto --help 检查安装。

编译库

要编译库,你可以运行

awto compile <output>

目前可用的输出有

  • database - 同步数据库与您的模式,并通过 SeaORM 生成库以执行数据库操作。
  • protobuf - 生成 protobuf 文件和库,可用于通过 tonic 作为 protobuf 服务器和客户端。

路线图

Awto 目前仍处于 alpha 阶段,目前主要作为一个实验。如果得到一些关注,将会投入更多精力使其成为 Rust 社区的一个有意义的工具。

贡献

无论您想分享想法、错误、建议或其他,您的对这个项目的贡献都是受欢迎的 🤌

许可证

通过贡献,您同意您的贡献将按照此仓库的 MITApache-2.0 许可证进行许可。

依赖项

~27MB
~583K SLoC