#arn #aws #resources #string #builder #name #manipulate

aws-arn

提供类型、构建器和其它辅助工具来操作 AWS 资源名称 (ARN) 字符串

6 个版本

0.3.1 2022 年 7 月 8 日
0.3.0 2022 年 7 月 8 日
0.2.1 2022 年 6 月 30 日
0.2.0 2021 年 4 月 9 日
0.1.1 2019 年 11 月 14 日

#715 in 网络编程

Download history 6330/week @ 2024-03-13 5329/week @ 2024-03-20 4654/week @ 2024-03-27 7694/week @ 2024-04-03 5407/week @ 2024-04-10 7291/week @ 2024-04-17 7295/week @ 2024-04-24 4543/week @ 2024-05-01 3915/week @ 2024-05-08 5237/week @ 2024-05-15 4640/week @ 2024-05-22 5605/week @ 2024-05-29 5281/week @ 2024-06-05 4913/week @ 2024-06-12 4243/week @ 2024-06-19 2885/week @ 2024-06-26

18,376 每月下载量
用于 rops

MIT 许可证

99KB
1.5K SLoC

Crate aws-arn

提供类型、构建器和其它辅助工具来操作 AWS 资源名称 (ARN) 字符串。

MIT License Minimum Rust Version crates.io docs.rs Build Audit GitHub stars

ARN 是所有 AWS 服务 API 的关键组件,但几乎所有客户端工具包都将其简单地视为字符串。虽然这可能是一个合理且快捷的决定,但似乎有必要不仅确保 ARN 的正确性,而且还需要构造器来确保这些字符串一开始就是正确的。

ARN 类型

本库提供了多个层次的 ARN 操作,首先是通过使用核心 ResourceNameIdentifierAccountIdentifierResourceIdentifier 类型直接构建 ARN 类型。

use aws_arn::{ResourceName, ResourceIdentifier};
use aws_arn::known::{Partition, Service};
use std::str::FromStr;

let arn = ResourceName {
    partition: Some(Partition::default().into()),
    service: Service::S3.into(),
    region: None,
    account_id: None,
    resource: ResourceIdentifier::from_str("mythings/thing-1").unwrap()
};

在上面的例子中,由于我们正在定义一个最小的 ResourceName,我们可以使用定义的构造函数之一。

use aws_arn::{ResourceName, ResourceIdentifier};
use aws_arn::known::Service;
use std::str::FromStr;

let arn = ResourceName::aws(
    Service::S3.into(),
    ResourceIdentifier::from_str("mythings/thing-1").unwrap()
);

或者,使用 FromStr,你可以将现有的 ARN 字符串解析为 ARN 值。

use aws_arn::ResourceName;
use std::str::FromStr;

let arn: ResourceName = "arn:aws:s3:::mythings/thing-1"
    .parse()
    .expect("didn't look like an ResourceName");

另一种方法是使用更易读的 构建器,它还允许你忽略 ARN 中你通常不需要的字段,并使用更流畅的 ARN 构造风格。

45Muse aws_arn::builder::{ArnBuilder, ResourceBuilder};
use aws_arn::known::{Partition, Service};
use aws_arn::{ResourceName, Identifier};
use std::str::FromStr;

let arn: ResourceName = ArnBuilder::service_id(Service::S3.into())
    .resource(ResourceBuilder::named(Identifier::from_str("mythings").unwrap())
        .resource_name(Identifier::new_unchecked("my-layer"))
        .build_resource_path())
    .in_partition_id(Partition::Aws.into())
    .into();

最后,可以使用特定于资源类型的函数,这允许更直接和简单的构造(模块 aws_arn::builder::service - 服务构建器函数,尽管目前支持的服务较少)。

use aws_arn::builder::s3;
use aws_arn::Identifier;
use std::str::FromStr;

let arn = s3::object(
    Identifier::from_str("mythings").unwrap(),
    Identifier::from_str("thing-1").unwrap(),
);

更多信息,请参阅 AWS 关于 资源名称 (ARN) 的文档。

可选功能

本库尽可能保持精简,具有极少的依赖项,我们已将以下功能作为可选功能包含在内。

  • builders 添加构建器模块。此功能默认启用,还需要 known 功能。
  • known 添加了一个包含分区、区域和服务枚举的模块。此功能默认启用。
  • serde_supportARNResource 类型添加了派生 SerializeDeserialize 实现。此功能默认启用。

变更

版本 0.3.1

  • AccountIdentifier 添加了单元测试。

版本 0.3.0

  • 重大变更:将 ARN 重命名为 ResourceName
  • 重大变更:将 ArnError 重命名为 Error
  • 添加了通用标识符操作的接口。
  • ResourceIdentifierResourceName 添加了变量扩展。
  • 添加了更多的单元测试。

版本 0.2.1

  • 为 12 位值创建了一个新的 AccountIdentifier 类型。
  • consts 功能重命名为 known

版本 0.2.0

  • 放宽了标识符和资源标识符的验证。
  • 移除了增加了大量验证困惑的 Resource 类型。
  • 使用新的 IdentifierResourceIdentifier 类型来构建正确的 ARN 值,无需任何外部验证方法。
  • ResourceBuilder 替换为用于 ResourceIdentifier 值的一个。
  • 移除了 ext_validation 功能
  • 添加了 consts 功能
  • builder 模块放入新的 builders 功能。
  • 添加了许多更多测试,包括一个 examples.txt 文件,它是一个要解析的长列表。
  • 修复了 Github 问题-2

版本 0.1.1

  • 添加和修复了文档,包括 README 和 Rustdoc。
  • 重命名服务构建函数,为 s3 添加了父/子模式。
  • 添加了 Serde 功能。
  • 使外部验证可选。

版本 0.1.0

  • 初始提交。
  • 提供具有 DisplayFromStr 的基本 ARN 类型。
  • 为特定服务的验证提供脚手架。
  • 为 ARN 构建提供初始的一组服务构建函数,make_{format}

待办事项

  • 更多测试!
  • 更多验证服务格式。
  • 更多服务构建函数。

依赖项

~2–3.5MB
~57K SLoC