1个不稳定版本
0.1.0 | 2024年5月29日 |
---|
263 在 过程宏 中
115KB
1K SLoC
AWS SDK编译检查
检查调用AWS SDK客户端方法时是否存在必需的属性,适用于大约300个AWS crate和9000个方法。
默认情况下,当缺少必需属性时,AWS SDK将在运行时崩溃。使用此宏,我们将错误时间提前到编译时。
安装
使用以下命令将宏添加到依赖项中
cargo add aws-sdk-compile-checks
用法
将crate添加到依赖项后,您可以使用#[required_props]
属性来注释使用AWS客户端的函数。
例如
use aws_sdk_compile_checks_macro::required_props;
use aws_sdk_sqs::config::BehaviorVersion;
#[required_props]
async fn example() -> Result<(), String> {
let aws_config = aws_config::load_defaults(BehaviorVersion::latest()).await;
let sqs_client = aws_sdk_sqs::Client::new(&aws_config);
sqs_client.send_message()
// missing queue url
.message_body("some message")
.send()
.await;
Ok(())
}
在上面的示例中,您将得到一个编译时错误,抱怨所需的queue_url()
缺失。
您还可以将属性添加到impl
块中。以下示例将编译成功,因为它具有所有必需的属性
use aws_sdk_compile_checks_macro::required_props;
use aws_sdk_sqs::Client;
struct AwsClientPrefix {
sqs_client: Client,
}
impl AwsClientPrefix {
#[required_props]
async fn call(&self) {
let _ = self.sqs_client
.receive_message()
.queue_url("something")
.send()
.await;
}
}
您可以指定SDK。这可能可以稍微加快搜索过程。
use aws_sdk_compile_checks_macro::required_props;
use aws_sdk_sqs::Client;
#[required_props(sdk = sqs)]
async fn do_call(sqs_client: Client) {
let _ = sqs_client
.receive_message()
.queue_url("something")
.send()
.await;
}
当方法名有重叠时,需要指定您的SDK。即当多个SDK具有给定方法名且必需属性不同时。例如,connectparticipant
和 sqs
都有 send_message
方法。在这种情况下,宏可能无法正确识别正确的SDK。如果是这种情况,它将要求您更加具体。
限制
在没有额外参数的情况下使用时,宏会尝试通过查看签名、类型和命名等因素,做出关于特定SDK客户端的“有见识的猜测”,因为方法名通常是唯一的,我们通常只有一个必需属性的列表。
但这都是启发式方法,所以可能会出错
- 我们可能会认为某件事是SDK调用,而实际上并不是
- 我们可能会认为某件事不是SDK调用,而实际上是
- 我们可能会错误地识别方法
- ...
在足够复杂的使用案例中,误报和漏报是不可避免的。可以通过改进启发式方法来减轻,但在某些情况下,您可能需要自行采取行动。
- 将误识别为SDK调用的代码分离出来
- 选择有助于宏识别正确客户端的名称(例如,使用
sqs_client
而不是client
) - 使用
sdk =
指定需要检查的SDK(参见上方的“使用”部分)
从理论上讲,所需的属性可能会随着时间的推移而演变,这意味着宏应该考虑您正在运行的AWS SDK的版本。但由于这是现有属性的破坏性更改,这应该是非常罕见的。尽管如此,如果SDK中添加了尚未列入此宏维护列表的新方法,仍然可能会发生误报。
PRs等。
欢迎拉取请求、评论和建议。
待办事项
- 减少对事物的拥有权
- 一些重构
- 设置GitHub操作检查
- 在“使用”中挑选另一个比sagemaker更快的示例SDK?
尚未包含的包
目前有约30个包尚未包含,以下是一份列表。
在某些情况下,我认为这些包不太重要,或者编译时检查的使用较少。更多的包和方法意味着更多的空间和时间需求。应请求,可以从该列表中添加包。
- aws_sdk_finspace
- bcmdataexports
- chime
- chimesdkidentity
- chimesdkmediapipelines
- chimesdkmeetings
- chimesdkmessaging
- chimesdkvoice
- cloudsearchdomain
- databasemigration
- ivschat
- licensemanager
- licensemanagerlinuxsubscriptions
- licensemanagerusersubscriptions
- migrationhub
- migrationhubconfig
- migrationhuborchestrator
- migrationhubrefactorspaces
- migrationhubstrategy
- rbin
- simspaceweaver
- tnb
- wellarchitected
- wisdom
- workdocs
- worklink
- workmail
- workmailmessageflow
- workspaces
- workspacesthinclient
- workspacesweb
依赖关系
~275–720KB
~17K SLoC