Add `Metadata` to a config layer through operation runtime plugin (#2830)
## Motivation and Context Adds `Metadata` to a config layer through `OperationRuntimePlugin`. ## Description We have had a customer's use case where a service name and a operation name are obtained from [Metadata](https://github.com/awslabs/smithy-rs/blob/ddba46086a9754c01f3b11d7521c49d4489de84b/rust-runtime/aws-smithy-http/src/operation.rs#L17-L22 ). The end goal was to use their names as part of metrics collection. Previously, it was done using `map_operation` on a `CustomizableOperation`, e.g. ``` client .some_operation() .customize() .await? .map_operation(|operation| { operation.try_clone().map(|operation| { let (_, parts) = operation.into_request_response(); parts.metadata.map(|metadata| { let service_name = metadata.service().to_string().to_uppercase(); let operation_name = metadata.name().to_string(); /* * do something with `service_name` and `operation_name` */ }) }); Ok(operation) })? .send() .await; ``` The orchestrator no longer supports `map_operation` on `CustomizableOperation`. We therefore add `Metadata` to a config layer through `OperationRuntimePlugin`. See the added integration test for how `Metadata` is retrieved from within an interceptor. ## Testing Added an integration-test to verify `Metadata` is properly set. ---- _By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice._ --------- Co-authored-by:ysaito1001 <awsaito@amazon.com> Co-authored-by:
Zelda Hessler <zhessler@amazon.com>
Loading
Please register or sign in to comment