aws_sdk_mediapackagev2/operation/
put_channel_policy.rs

1// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
2/// Orchestration and serialization glue logic for `PutChannelPolicy`.
3#[derive(::std::clone::Clone, ::std::default::Default, ::std::fmt::Debug)]
4#[non_exhaustive]
5pub struct PutChannelPolicy;
6impl PutChannelPolicy {
7    /// Creates a new `PutChannelPolicy`
8    pub fn new() -> Self {
9        Self
10    }
11    pub(crate) async fn orchestrate(
12        runtime_plugins: &::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins,
13        input: crate::operation::put_channel_policy::PutChannelPolicyInput,
14    ) -> ::std::result::Result<
15        crate::operation::put_channel_policy::PutChannelPolicyOutput,
16        ::aws_smithy_runtime_api::client::result::SdkError<
17            crate::operation::put_channel_policy::PutChannelPolicyError,
18            ::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
19        >,
20    > {
21        let map_err = |err: ::aws_smithy_runtime_api::client::result::SdkError<
22            ::aws_smithy_runtime_api::client::interceptors::context::Error,
23            ::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
24        >| {
25            err.map_service_error(|err| {
26                err.downcast::<crate::operation::put_channel_policy::PutChannelPolicyError>()
27                    .expect("correct error type")
28            })
29        };
30        let context = Self::orchestrate_with_stop_point(runtime_plugins, input, ::aws_smithy_runtime::client::orchestrator::StopPoint::None)
31            .await
32            .map_err(map_err)?;
33        let output = context.finalize().map_err(map_err)?;
34        ::std::result::Result::Ok(
35            output
36                .downcast::<crate::operation::put_channel_policy::PutChannelPolicyOutput>()
37                .expect("correct output type"),
38        )
39    }
40
41    pub(crate) async fn orchestrate_with_stop_point(
42        runtime_plugins: &::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins,
43        input: crate::operation::put_channel_policy::PutChannelPolicyInput,
44        stop_point: ::aws_smithy_runtime::client::orchestrator::StopPoint,
45    ) -> ::std::result::Result<
46        ::aws_smithy_runtime_api::client::interceptors::context::InterceptorContext,
47        ::aws_smithy_runtime_api::client::result::SdkError<
48            ::aws_smithy_runtime_api::client::interceptors::context::Error,
49            ::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
50        >,
51    > {
52        let input = ::aws_smithy_runtime_api::client::interceptors::context::Input::erase(input);
53        use ::tracing::Instrument;
54        ::aws_smithy_runtime::client::orchestrator::invoke_with_stop_point("MediaPackageV2", "PutChannelPolicy", input, runtime_plugins, stop_point)
55            // Create a parent span for the entire operation. Includes a random, internal-only,
56            // seven-digit ID for the operation orchestration so that it can be correlated in the logs.
57            .instrument(::tracing::debug_span!(
58                "MediaPackageV2.PutChannelPolicy",
59                "rpc.service" = "MediaPackageV2",
60                "rpc.method" = "PutChannelPolicy",
61                "sdk_invocation_id" = ::fastrand::u32(1_000_000..10_000_000),
62                "rpc.system" = "aws-api",
63            ))
64            .await
65    }
66
67    pub(crate) fn operation_runtime_plugins(
68        client_runtime_plugins: ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins,
69        client_config: &crate::config::Config,
70        config_override: ::std::option::Option<crate::config::Builder>,
71    ) -> ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins {
72        let mut runtime_plugins = client_runtime_plugins.with_operation_plugin(Self::new());
73        runtime_plugins = runtime_plugins.with_client_plugin(crate::auth_plugin::DefaultAuthOptionsPlugin::new(vec![
74            ::aws_runtime::auth::sigv4::SCHEME_ID,
75        ]));
76        if let ::std::option::Option::Some(config_override) = config_override {
77            for plugin in config_override.runtime_plugins.iter().cloned() {
78                runtime_plugins = runtime_plugins.with_operation_plugin(plugin);
79            }
80            runtime_plugins = runtime_plugins.with_operation_plugin(crate::config::ConfigOverrideRuntimePlugin::new(
81                config_override,
82                client_config.config.clone(),
83                &client_config.runtime_components,
84            ));
85        }
86        runtime_plugins
87    }
88}
89impl ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugin for PutChannelPolicy {
90    fn config(&self) -> ::std::option::Option<::aws_smithy_types::config_bag::FrozenLayer> {
91        let mut cfg = ::aws_smithy_types::config_bag::Layer::new("PutChannelPolicy");
92
93        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedRequestSerializer::new(
94            PutChannelPolicyRequestSerializer,
95        ));
96        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedResponseDeserializer::new(
97            PutChannelPolicyResponseDeserializer,
98        ));
99
100        cfg.store_put(::aws_smithy_runtime_api::client::auth::AuthSchemeOptionResolverParams::new(
101            ::aws_smithy_runtime_api::client::auth::static_resolver::StaticAuthSchemeOptionResolverParams::new(),
102        ));
103
104        cfg.store_put(::aws_smithy_runtime_api::client::orchestrator::Metadata::new(
105            "PutChannelPolicy",
106            "MediaPackageV2",
107        ));
108        let mut signing_options = ::aws_runtime::auth::SigningOptions::default();
109        signing_options.double_uri_encode = true;
110        signing_options.content_sha256_header = false;
111        signing_options.normalize_uri_path = true;
112        signing_options.payload_override = None;
113
114        cfg.store_put(::aws_runtime::auth::SigV4OperationSigningConfig {
115            signing_options,
116            ..::std::default::Default::default()
117        });
118
119        ::std::option::Option::Some(cfg.freeze())
120    }
121
122    fn runtime_components(
123        &self,
124        _: &::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder,
125    ) -> ::std::borrow::Cow<'_, ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder> {
126        #[allow(unused_mut)]
127        let mut rcb = ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder::new("PutChannelPolicy")
128            .with_interceptor(::aws_smithy_runtime::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default())
129            .with_interceptor(PutChannelPolicyEndpointParamsInterceptor)
130            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<
131                crate::operation::put_channel_policy::PutChannelPolicyError,
132            >::new())
133            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<
134                crate::operation::put_channel_policy::PutChannelPolicyError,
135            >::new())
136            .with_retry_classifier(::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<
137                crate::operation::put_channel_policy::PutChannelPolicyError,
138            >::new());
139
140        ::std::borrow::Cow::Owned(rcb)
141    }
142}
143
144#[derive(Debug)]
145struct PutChannelPolicyResponseDeserializer;
146impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for PutChannelPolicyResponseDeserializer {
147    fn deserialize_nonstreaming(
148        &self,
149        response: &::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
150    ) -> ::aws_smithy_runtime_api::client::interceptors::context::OutputOrError {
151        let (success, status) = (response.status().is_success(), response.status().as_u16());
152        let headers = response.headers();
153        let body = response.body().bytes().expect("body loaded");
154        #[allow(unused_mut)]
155        let mut force_error = false;
156        ::tracing::debug!(request_id = ?::aws_types::request_id::RequestId::request_id(response));
157        let parse_result = if !success && status != 200 || force_error {
158            crate::protocol_serde::shape_put_channel_policy::de_put_channel_policy_http_error(status, headers, body)
159        } else {
160            crate::protocol_serde::shape_put_channel_policy::de_put_channel_policy_http_response(status, headers, body)
161        };
162        crate::protocol_serde::type_erase_result(parse_result)
163    }
164}
165#[derive(Debug)]
166struct PutChannelPolicyRequestSerializer;
167impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for PutChannelPolicyRequestSerializer {
168    #[allow(unused_mut, clippy::let_and_return, clippy::needless_borrow, clippy::useless_conversion)]
169    fn serialize_input(
170        &self,
171        input: ::aws_smithy_runtime_api::client::interceptors::context::Input,
172        _cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
173    ) -> ::std::result::Result<::aws_smithy_runtime_api::client::orchestrator::HttpRequest, ::aws_smithy_runtime_api::box_error::BoxError> {
174        let input = input
175            .downcast::<crate::operation::put_channel_policy::PutChannelPolicyInput>()
176            .expect("correct type");
177        let _header_serialization_settings = _cfg
178            .load::<crate::serialization_settings::HeaderSerializationSettings>()
179            .cloned()
180            .unwrap_or_default();
181        let mut request_builder = {
182            fn uri_base(
183                _input: &crate::operation::put_channel_policy::PutChannelPolicyInput,
184                output: &mut ::std::string::String,
185            ) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
186                use ::std::fmt::Write as _;
187                let input_1 = &_input.channel_group_name;
188                let input_1 = input_1.as_ref().ok_or_else(|| {
189                    ::aws_smithy_types::error::operation::BuildError::missing_field("channel_group_name", "cannot be empty or unset")
190                })?;
191                let channel_group_name = ::aws_smithy_http::label::fmt_string(input_1, ::aws_smithy_http::label::EncodingStrategy::Default);
192                if channel_group_name.is_empty() {
193                    return ::std::result::Result::Err(::aws_smithy_types::error::operation::BuildError::missing_field(
194                        "channel_group_name",
195                        "cannot be empty or unset",
196                    ));
197                }
198                let input_2 = &_input.channel_name;
199                let input_2 = input_2
200                    .as_ref()
201                    .ok_or_else(|| ::aws_smithy_types::error::operation::BuildError::missing_field("channel_name", "cannot be empty or unset"))?;
202                let channel_name = ::aws_smithy_http::label::fmt_string(input_2, ::aws_smithy_http::label::EncodingStrategy::Default);
203                if channel_name.is_empty() {
204                    return ::std::result::Result::Err(::aws_smithy_types::error::operation::BuildError::missing_field(
205                        "channel_name",
206                        "cannot be empty or unset",
207                    ));
208                }
209                ::std::write!(
210                    output,
211                    "/channelGroup/{ChannelGroupName}/channel/{ChannelName}/policy",
212                    ChannelGroupName = channel_group_name,
213                    ChannelName = channel_name
214                )
215                .expect("formatting should succeed");
216                ::std::result::Result::Ok(())
217            }
218            #[allow(clippy::unnecessary_wraps)]
219            fn update_http_builder(
220                input: &crate::operation::put_channel_policy::PutChannelPolicyInput,
221                builder: ::http::request::Builder,
222            ) -> ::std::result::Result<::http::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
223                let mut uri = ::std::string::String::new();
224                uri_base(input, &mut uri)?;
225                ::std::result::Result::Ok(builder.method("PUT").uri(uri))
226            }
227            let mut builder = update_http_builder(&input, ::http::request::Builder::new())?;
228            builder = _header_serialization_settings.set_default_header(builder, ::http::header::CONTENT_TYPE, "application/json");
229            builder
230        };
231        let body = ::aws_smithy_types::body::SdkBody::from(crate::protocol_serde::shape_put_channel_policy::ser_put_channel_policy_input(&input)?);
232        if let Some(content_length) = body.content_length() {
233            let content_length = content_length.to_string();
234            request_builder = _header_serialization_settings.set_default_header(request_builder, ::http::header::CONTENT_LENGTH, &content_length);
235        }
236        ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
237    }
238}
239#[derive(Debug)]
240struct PutChannelPolicyEndpointParamsInterceptor;
241
242impl ::aws_smithy_runtime_api::client::interceptors::Intercept for PutChannelPolicyEndpointParamsInterceptor {
243    fn name(&self) -> &'static str {
244        "PutChannelPolicyEndpointParamsInterceptor"
245    }
246
247    fn read_before_execution(
248        &self,
249        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
250            '_,
251            ::aws_smithy_runtime_api::client::interceptors::context::Input,
252            ::aws_smithy_runtime_api::client::interceptors::context::Output,
253            ::aws_smithy_runtime_api::client::interceptors::context::Error,
254        >,
255        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
256    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
257        let _input = context
258            .input()
259            .downcast_ref::<PutChannelPolicyInput>()
260            .ok_or("failed to downcast to PutChannelPolicyInput")?;
261
262        let params = crate::config::endpoint::Params::builder()
263            .set_region(cfg.load::<::aws_types::region::Region>().map(|r| r.as_ref().to_owned()))
264            .set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
265            .set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
266            .set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
267            .build()
268            .map_err(|err| {
269                ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err)
270            })?;
271        cfg.interceptor_state()
272            .store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
273        ::std::result::Result::Ok(())
274    }
275}
276
277// The get_* functions below are generated from JMESPath expressions in the
278// operationContextParams trait. They target the operation's input shape.
279
280/// Error type for the `PutChannelPolicyError` operation.
281#[non_exhaustive]
282#[derive(::std::fmt::Debug)]
283pub enum PutChannelPolicyError {
284    /// <p>You don't have permissions to perform the requested operation. The user or role that is making the request must have at least one IAM permissions policy attached that grants the required permissions. For more information, see Access Management in the IAM User Guide.</p>
285    AccessDeniedException(crate::types::error::AccessDeniedException),
286    /// <p>Updating or deleting this resource can cause an inconsistent state.</p>
287    ConflictException(crate::types::error::ConflictException),
288    /// <p>Indicates that an error from the service occurred while trying to process a request.</p>
289    InternalServerException(crate::types::error::InternalServerException),
290    /// <p>The specified resource doesn't exist.</p>
291    ResourceNotFoundException(crate::types::error::ResourceNotFoundException),
292    /// <p>The request throughput limit was exceeded.</p>
293    ThrottlingException(crate::types::error::ThrottlingException),
294    /// <p>The input failed to meet the constraints specified by the AWS service.</p>
295    ValidationException(crate::types::error::ValidationException),
296    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
297    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
298    variable wildcard pattern and check `.code()`:
299     \
300    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
301     \
302    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-PutChannelPolicyError) for what information is available for the error.")]
303    Unhandled(crate::error::sealed_unhandled::Unhandled),
304}
305impl PutChannelPolicyError {
306    /// Creates the `PutChannelPolicyError::Unhandled` variant from any error type.
307    pub fn unhandled(
308        err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>,
309    ) -> Self {
310        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
311            source: err.into(),
312            meta: ::std::default::Default::default(),
313        })
314    }
315
316    /// Creates the `PutChannelPolicyError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
317    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
318        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
319            source: err.clone().into(),
320            meta: err,
321        })
322    }
323    ///
324    /// Returns error metadata, which includes the error code, message,
325    /// request ID, and potentially additional information.
326    ///
327    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
328        match self {
329            Self::AccessDeniedException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
330            Self::ConflictException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
331            Self::InternalServerException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
332            Self::ResourceNotFoundException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
333            Self::ThrottlingException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
334            Self::ValidationException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
335            Self::Unhandled(e) => &e.meta,
336        }
337    }
338    /// Returns `true` if the error kind is `PutChannelPolicyError::AccessDeniedException`.
339    pub fn is_access_denied_exception(&self) -> bool {
340        matches!(self, Self::AccessDeniedException(_))
341    }
342    /// Returns `true` if the error kind is `PutChannelPolicyError::ConflictException`.
343    pub fn is_conflict_exception(&self) -> bool {
344        matches!(self, Self::ConflictException(_))
345    }
346    /// Returns `true` if the error kind is `PutChannelPolicyError::InternalServerException`.
347    pub fn is_internal_server_exception(&self) -> bool {
348        matches!(self, Self::InternalServerException(_))
349    }
350    /// Returns `true` if the error kind is `PutChannelPolicyError::ResourceNotFoundException`.
351    pub fn is_resource_not_found_exception(&self) -> bool {
352        matches!(self, Self::ResourceNotFoundException(_))
353    }
354    /// Returns `true` if the error kind is `PutChannelPolicyError::ThrottlingException`.
355    pub fn is_throttling_exception(&self) -> bool {
356        matches!(self, Self::ThrottlingException(_))
357    }
358    /// Returns `true` if the error kind is `PutChannelPolicyError::ValidationException`.
359    pub fn is_validation_exception(&self) -> bool {
360        matches!(self, Self::ValidationException(_))
361    }
362}
363impl ::std::error::Error for PutChannelPolicyError {
364    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
365        match self {
366            Self::AccessDeniedException(_inner) => ::std::option::Option::Some(_inner),
367            Self::ConflictException(_inner) => ::std::option::Option::Some(_inner),
368            Self::InternalServerException(_inner) => ::std::option::Option::Some(_inner),
369            Self::ResourceNotFoundException(_inner) => ::std::option::Option::Some(_inner),
370            Self::ThrottlingException(_inner) => ::std::option::Option::Some(_inner),
371            Self::ValidationException(_inner) => ::std::option::Option::Some(_inner),
372            Self::Unhandled(_inner) => ::std::option::Option::Some(&*_inner.source),
373        }
374    }
375}
376impl ::std::fmt::Display for PutChannelPolicyError {
377    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
378        match self {
379            Self::AccessDeniedException(_inner) => _inner.fmt(f),
380            Self::ConflictException(_inner) => _inner.fmt(f),
381            Self::InternalServerException(_inner) => _inner.fmt(f),
382            Self::ResourceNotFoundException(_inner) => _inner.fmt(f),
383            Self::ThrottlingException(_inner) => _inner.fmt(f),
384            Self::ValidationException(_inner) => _inner.fmt(f),
385            Self::Unhandled(_inner) => {
386                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
387                    write!(f, "unhandled error ({code})")
388                } else {
389                    f.write_str("unhandled error")
390                }
391            }
392        }
393    }
394}
395impl ::aws_smithy_types::retry::ProvideErrorKind for PutChannelPolicyError {
396    fn code(&self) -> ::std::option::Option<&str> {
397        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
398    }
399    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
400        ::std::option::Option::None
401    }
402}
403impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for PutChannelPolicyError {
404    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
405        match self {
406            Self::AccessDeniedException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
407            Self::ConflictException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
408            Self::InternalServerException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
409            Self::ResourceNotFoundException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
410            Self::ThrottlingException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
411            Self::ValidationException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
412            Self::Unhandled(_inner) => &_inner.meta,
413        }
414    }
415}
416impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for PutChannelPolicyError {
417    fn create_unhandled_error(
418        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
419        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>,
420    ) -> Self {
421        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
422            source,
423            meta: meta.unwrap_or_default(),
424        })
425    }
426}
427impl ::aws_types::request_id::RequestId for crate::operation::put_channel_policy::PutChannelPolicyError {
428    fn request_id(&self) -> Option<&str> {
429        self.meta().request_id()
430    }
431}
432
433pub use crate::operation::put_channel_policy::_put_channel_policy_output::PutChannelPolicyOutput;
434
435pub use crate::operation::put_channel_policy::_put_channel_policy_input::PutChannelPolicyInput;
436
437mod _put_channel_policy_input;
438
439mod _put_channel_policy_output;
440
441/// Builders
442pub mod builders;