aws_sdk_verifiedpermissions/operation/
create_policy_template.rs

1// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
2/// Orchestration and serialization glue logic for `CreatePolicyTemplate`.
3#[derive(::std::clone::Clone, ::std::default::Default, ::std::fmt::Debug)]
4#[non_exhaustive]
5pub struct CreatePolicyTemplate;
6impl CreatePolicyTemplate {
7    /// Creates a new `CreatePolicyTemplate`
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::create_policy_template::CreatePolicyTemplateInput,
14    ) -> ::std::result::Result<
15        crate::operation::create_policy_template::CreatePolicyTemplateOutput,
16        ::aws_smithy_runtime_api::client::result::SdkError<
17            crate::operation::create_policy_template::CreatePolicyTemplateError,
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::create_policy_template::CreatePolicyTemplateError>()
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::create_policy_template::CreatePolicyTemplateOutput>()
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::create_policy_template::CreatePolicyTemplateInput,
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(
55            "VerifiedPermissions",
56            "CreatePolicyTemplate",
57            input,
58            runtime_plugins,
59            stop_point,
60        )
61        // Create a parent span for the entire operation. Includes a random, internal-only,
62        // seven-digit ID for the operation orchestration so that it can be correlated in the logs.
63        .instrument(::tracing::debug_span!(
64            "VerifiedPermissions.CreatePolicyTemplate",
65            "rpc.service" = "VerifiedPermissions",
66            "rpc.method" = "CreatePolicyTemplate",
67            "sdk_invocation_id" = ::fastrand::u32(1_000_000..10_000_000),
68            "rpc.system" = "aws-api",
69        ))
70        .await
71    }
72
73    pub(crate) fn operation_runtime_plugins(
74        client_runtime_plugins: ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins,
75        client_config: &crate::config::Config,
76        config_override: ::std::option::Option<crate::config::Builder>,
77    ) -> ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins {
78        let mut runtime_plugins = client_runtime_plugins.with_operation_plugin(Self::new());
79        runtime_plugins = runtime_plugins.with_operation_plugin(crate::client_idempotency_token::IdempotencyTokenRuntimePlugin::new(
80            |token_provider, input| {
81                let input: &mut crate::operation::create_policy_template::CreatePolicyTemplateInput = input.downcast_mut().expect("correct type");
82                if input.client_token.is_none() {
83                    input.client_token = ::std::option::Option::Some(token_provider.make_idempotency_token());
84                }
85            },
86        ));
87        if let ::std::option::Option::Some(config_override) = config_override {
88            for plugin in config_override.runtime_plugins.iter().cloned() {
89                runtime_plugins = runtime_plugins.with_operation_plugin(plugin);
90            }
91            runtime_plugins = runtime_plugins.with_operation_plugin(crate::config::ConfigOverrideRuntimePlugin::new(
92                config_override,
93                client_config.config.clone(),
94                &client_config.runtime_components,
95            ));
96        }
97        runtime_plugins
98    }
99}
100impl ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugin for CreatePolicyTemplate {
101    fn config(&self) -> ::std::option::Option<::aws_smithy_types::config_bag::FrozenLayer> {
102        let mut cfg = ::aws_smithy_types::config_bag::Layer::new("CreatePolicyTemplate");
103
104        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedRequestSerializer::new(
105            CreatePolicyTemplateRequestSerializer,
106        ));
107        cfg.store_put(::aws_smithy_runtime_api::client::ser_de::SharedResponseDeserializer::new(
108            CreatePolicyTemplateResponseDeserializer,
109        ));
110
111        cfg.store_put(::aws_smithy_runtime_api::client::auth::AuthSchemeOptionResolverParams::new(
112            crate::config::auth::Params::builder()
113                .operation_name("CreatePolicyTemplate")
114                .build()
115                .expect("required fields set"),
116        ));
117
118        cfg.store_put(::aws_smithy_runtime_api::client::orchestrator::Metadata::new(
119            "CreatePolicyTemplate",
120            "VerifiedPermissions",
121        ));
122        let mut signing_options = ::aws_runtime::auth::SigningOptions::default();
123        signing_options.double_uri_encode = true;
124        signing_options.content_sha256_header = false;
125        signing_options.normalize_uri_path = true;
126        signing_options.payload_override = None;
127
128        cfg.store_put(::aws_runtime::auth::SigV4OperationSigningConfig {
129            signing_options,
130            ..::std::default::Default::default()
131        });
132
133        ::std::option::Option::Some(cfg.freeze())
134    }
135
136    fn runtime_components(
137        &self,
138        _: &::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder,
139    ) -> ::std::borrow::Cow<'_, ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder> {
140        #[allow(unused_mut)]
141        let mut rcb = ::aws_smithy_runtime_api::client::runtime_components::RuntimeComponentsBuilder::new("CreatePolicyTemplate")
142            .with_interceptor(::aws_smithy_runtime::client::stalled_stream_protection::StalledStreamProtectionInterceptor::default())
143            .with_interceptor(CreatePolicyTemplateEndpointParamsInterceptor)
144            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::TransientErrorClassifier::<
145                crate::operation::create_policy_template::CreatePolicyTemplateError,
146            >::new())
147            .with_retry_classifier(::aws_smithy_runtime::client::retries::classifiers::ModeledAsRetryableClassifier::<
148                crate::operation::create_policy_template::CreatePolicyTemplateError,
149            >::new())
150            .with_retry_classifier(::aws_runtime::retries::classifiers::AwsErrorCodeClassifier::<
151                crate::operation::create_policy_template::CreatePolicyTemplateError,
152            >::new());
153
154        ::std::borrow::Cow::Owned(rcb)
155    }
156}
157
158#[derive(Debug)]
159struct CreatePolicyTemplateResponseDeserializer;
160impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for CreatePolicyTemplateResponseDeserializer {
161    fn deserialize_nonstreaming(
162        &self,
163        response: &::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
164    ) -> ::aws_smithy_runtime_api::client::interceptors::context::OutputOrError {
165        let (success, status) = (response.status().is_success(), response.status().as_u16());
166        let headers = response.headers();
167        let body = response.body().bytes().expect("body loaded");
168        #[allow(unused_mut)]
169        let mut force_error = false;
170        ::tracing::debug!(request_id = ?::aws_types::request_id::RequestId::request_id(response));
171        let parse_result = if !success && status != 200 || force_error {
172            crate::protocol_serde::shape_create_policy_template::de_create_policy_template_http_error(status, headers, body)
173        } else {
174            crate::protocol_serde::shape_create_policy_template::de_create_policy_template_http_response(status, headers, body)
175        };
176        crate::protocol_serde::type_erase_result(parse_result)
177    }
178}
179#[derive(Debug)]
180struct CreatePolicyTemplateRequestSerializer;
181impl ::aws_smithy_runtime_api::client::ser_de::SerializeRequest for CreatePolicyTemplateRequestSerializer {
182    #[allow(unused_mut, clippy::let_and_return, clippy::needless_borrow, clippy::useless_conversion)]
183    fn serialize_input(
184        &self,
185        input: ::aws_smithy_runtime_api::client::interceptors::context::Input,
186        _cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
187    ) -> ::std::result::Result<::aws_smithy_runtime_api::client::orchestrator::HttpRequest, ::aws_smithy_runtime_api::box_error::BoxError> {
188        let input = input
189            .downcast::<crate::operation::create_policy_template::CreatePolicyTemplateInput>()
190            .expect("correct type");
191        let _header_serialization_settings = _cfg
192            .load::<crate::serialization_settings::HeaderSerializationSettings>()
193            .cloned()
194            .unwrap_or_default();
195        let mut request_builder = {
196            #[allow(clippy::uninlined_format_args)]
197            fn uri_base(
198                _input: &crate::operation::create_policy_template::CreatePolicyTemplateInput,
199                output: &mut ::std::string::String,
200            ) -> ::std::result::Result<(), ::aws_smithy_types::error::operation::BuildError> {
201                use ::std::fmt::Write as _;
202                ::std::write!(output, "/").expect("formatting should succeed");
203                ::std::result::Result::Ok(())
204            }
205            #[allow(clippy::unnecessary_wraps)]
206            fn update_http_builder(
207                input: &crate::operation::create_policy_template::CreatePolicyTemplateInput,
208                builder: ::http::request::Builder,
209            ) -> ::std::result::Result<::http::request::Builder, ::aws_smithy_types::error::operation::BuildError> {
210                let mut uri = ::std::string::String::new();
211                uri_base(input, &mut uri)?;
212                ::std::result::Result::Ok(builder.method("POST").uri(uri))
213            }
214            let mut builder = update_http_builder(&input, ::http::request::Builder::new())?;
215            builder = _header_serialization_settings.set_default_header(builder, ::http::header::CONTENT_TYPE, "application/x-amz-json-1.0");
216            builder = _header_serialization_settings.set_default_header(
217                builder,
218                ::http::header::HeaderName::from_static("x-amz-target"),
219                "VerifiedPermissions.CreatePolicyTemplate",
220            );
221            builder
222        };
223        let body = ::aws_smithy_types::body::SdkBody::from(crate::protocol_serde::shape_create_policy_template::ser_create_policy_template_input(
224            &input,
225        )?);
226        if let Some(content_length) = body.content_length() {
227            let content_length = content_length.to_string();
228            request_builder = _header_serialization_settings.set_default_header(request_builder, ::http::header::CONTENT_LENGTH, &content_length);
229        }
230        ::std::result::Result::Ok(request_builder.body(body).expect("valid request").try_into().unwrap())
231    }
232}
233#[derive(Debug)]
234struct CreatePolicyTemplateEndpointParamsInterceptor;
235
236impl ::aws_smithy_runtime_api::client::interceptors::Intercept for CreatePolicyTemplateEndpointParamsInterceptor {
237    fn name(&self) -> &'static str {
238        "CreatePolicyTemplateEndpointParamsInterceptor"
239    }
240
241    fn read_before_execution(
242        &self,
243        context: &::aws_smithy_runtime_api::client::interceptors::context::BeforeSerializationInterceptorContextRef<
244            '_,
245            ::aws_smithy_runtime_api::client::interceptors::context::Input,
246            ::aws_smithy_runtime_api::client::interceptors::context::Output,
247            ::aws_smithy_runtime_api::client::interceptors::context::Error,
248        >,
249        cfg: &mut ::aws_smithy_types::config_bag::ConfigBag,
250    ) -> ::std::result::Result<(), ::aws_smithy_runtime_api::box_error::BoxError> {
251        let _input = context
252            .input()
253            .downcast_ref::<CreatePolicyTemplateInput>()
254            .ok_or("failed to downcast to CreatePolicyTemplateInput")?;
255
256        let params = crate::config::endpoint::Params::builder()
257            .set_region(cfg.load::<::aws_types::region::Region>().map(|r| r.as_ref().to_owned()))
258            .set_use_dual_stack(cfg.load::<::aws_types::endpoint_config::UseDualStack>().map(|ty| ty.0))
259            .set_use_fips(cfg.load::<::aws_types::endpoint_config::UseFips>().map(|ty| ty.0))
260            .set_endpoint(cfg.load::<::aws_types::endpoint_config::EndpointUrl>().map(|ty| ty.0.clone()))
261            .build()
262            .map_err(|err| {
263                ::aws_smithy_runtime_api::client::interceptors::error::ContextAttachedError::new("endpoint params could not be built", err)
264            })?;
265        cfg.interceptor_state()
266            .store_put(::aws_smithy_runtime_api::client::endpoint::EndpointResolverParams::new(params));
267        ::std::result::Result::Ok(())
268    }
269}
270
271// The get_* functions below are generated from JMESPath expressions in the
272// operationContextParams trait. They target the operation's input shape.
273
274/// Error type for the `CreatePolicyTemplateError` operation.
275#[non_exhaustive]
276#[derive(::std::fmt::Debug)]
277pub enum CreatePolicyTemplateError {
278    /// <p>The request failed because another request to modify a resource occurred at the same.</p>
279    ConflictException(crate::types::error::ConflictException),
280    /// <p>The request failed because it references a resource that doesn't exist.</p>
281    ResourceNotFoundException(crate::types::error::ResourceNotFoundException),
282    /// <p>The request failed because it would cause a service quota to be exceeded.</p>
283    ServiceQuotaExceededException(crate::types::error::ServiceQuotaExceededException),
284    /// <p>You don't have sufficient access to perform this action.</p>
285    AccessDeniedException(crate::types::error::AccessDeniedException),
286    /// <p>The request failed because of an internal error. Try your request again later</p>
287    InternalServerException(crate::types::error::InternalServerException),
288    /// <p>The request failed because it exceeded a throttling quota.</p>
289    ThrottlingException(crate::types::error::ThrottlingException),
290    /// <p>The request failed because one or more input parameters don't satisfy their constraint requirements. The output is provided as a list of fields and a reason for each field that isn't valid.</p>
291    /// <p>The possible reasons include the following:</p>
292    /// <ul>
293    /// <li>
294    /// <p><b>UnrecognizedEntityType</b></p>
295    /// <p>The policy includes an entity type that isn't found in the schema.</p></li>
296    /// <li>
297    /// <p><b>UnrecognizedActionId</b></p>
298    /// <p>The policy includes an action id that isn't found in the schema.</p></li>
299    /// <li>
300    /// <p><b>InvalidActionApplication</b></p>
301    /// <p>The policy includes an action that, according to the schema, doesn't support the specified principal and resource.</p></li>
302    /// <li>
303    /// <p><b>UnexpectedType</b></p>
304    /// <p>The policy included an operand that isn't a valid type for the specified operation.</p></li>
305    /// <li>
306    /// <p><b>IncompatibleTypes</b></p>
307    /// <p>The types of elements included in a <code>set</code>, or the types of expressions used in an <code>if...then...else</code> clause aren't compatible in this context.</p></li>
308    /// <li>
309    /// <p><b>MissingAttribute</b></p>
310    /// <p>The policy attempts to access a record or entity attribute that isn't specified in the schema. Test for the existence of the attribute first before attempting to access its value. For more information, see the <a href="https://docs.cedarpolicy.com/policies/syntax-operators.html#has-presence-of-attribute-test">has (presence of attribute test) operator</a> in the <i>Cedar Policy Language Guide</i>.</p></li>
311    /// <li>
312    /// <p><b>UnsafeOptionalAttributeAccess</b></p>
313    /// <p>The policy attempts to access a record or entity attribute that is optional and isn't guaranteed to be present. Test for the existence of the attribute first before attempting to access its value. For more information, see the <a href="https://docs.cedarpolicy.com/policies/syntax-operators.html#has-presence-of-attribute-test">has (presence of attribute test) operator</a> in the <i>Cedar Policy Language Guide</i>.</p></li>
314    /// <li>
315    /// <p><b>ImpossiblePolicy</b></p>
316    /// <p>Cedar has determined that a policy condition always evaluates to false. If the policy is always false, it can never apply to any query, and so it can never affect an authorization decision.</p></li>
317    /// <li>
318    /// <p><b>WrongNumberArguments</b></p>
319    /// <p>The policy references an extension type with the wrong number of arguments.</p></li>
320    /// <li>
321    /// <p><b>FunctionArgumentValidationError</b></p>
322    /// <p>Cedar couldn't parse the argument passed to an extension type. For example, a string that is to be parsed as an IPv4 address can contain only digits and the period character.</p></li>
323    /// </ul>
324    ValidationException(crate::types::error::ValidationException),
325    /// An unexpected error occurred (e.g., invalid JSON returned by the service or an unknown error code).
326    #[deprecated(note = "Matching `Unhandled` directly is not forwards compatible. Instead, match using a \
327    variable wildcard pattern and check `.code()`:
328     \
329    &nbsp;&nbsp;&nbsp;`err if err.code() == Some(\"SpecificExceptionCode\") => { /* handle the error */ }`
330     \
331    See [`ProvideErrorMetadata`](#impl-ProvideErrorMetadata-for-CreatePolicyTemplateError) for what information is available for the error.")]
332    Unhandled(crate::error::sealed_unhandled::Unhandled),
333}
334impl CreatePolicyTemplateError {
335    /// Creates the `CreatePolicyTemplateError::Unhandled` variant from any error type.
336    pub fn unhandled(
337        err: impl ::std::convert::Into<::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>>,
338    ) -> Self {
339        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
340            source: err.into(),
341            meta: ::std::default::Default::default(),
342        })
343    }
344
345    /// Creates the `CreatePolicyTemplateError::Unhandled` variant from an [`ErrorMetadata`](::aws_smithy_types::error::ErrorMetadata).
346    pub fn generic(err: ::aws_smithy_types::error::ErrorMetadata) -> Self {
347        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
348            source: err.clone().into(),
349            meta: err,
350        })
351    }
352    ///
353    /// Returns error metadata, which includes the error code, message,
354    /// request ID, and potentially additional information.
355    ///
356    pub fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
357        match self {
358            Self::ConflictException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
359            Self::ResourceNotFoundException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
360            Self::ServiceQuotaExceededException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
361            Self::AccessDeniedException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
362            Self::InternalServerException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
363            Self::ThrottlingException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
364            Self::ValidationException(e) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(e),
365            Self::Unhandled(e) => &e.meta,
366        }
367    }
368    /// Returns `true` if the error kind is `CreatePolicyTemplateError::ConflictException`.
369    pub fn is_conflict_exception(&self) -> bool {
370        matches!(self, Self::ConflictException(_))
371    }
372    /// Returns `true` if the error kind is `CreatePolicyTemplateError::ResourceNotFoundException`.
373    pub fn is_resource_not_found_exception(&self) -> bool {
374        matches!(self, Self::ResourceNotFoundException(_))
375    }
376    /// Returns `true` if the error kind is `CreatePolicyTemplateError::ServiceQuotaExceededException`.
377    pub fn is_service_quota_exceeded_exception(&self) -> bool {
378        matches!(self, Self::ServiceQuotaExceededException(_))
379    }
380    /// Returns `true` if the error kind is `CreatePolicyTemplateError::AccessDeniedException`.
381    pub fn is_access_denied_exception(&self) -> bool {
382        matches!(self, Self::AccessDeniedException(_))
383    }
384    /// Returns `true` if the error kind is `CreatePolicyTemplateError::InternalServerException`.
385    pub fn is_internal_server_exception(&self) -> bool {
386        matches!(self, Self::InternalServerException(_))
387    }
388    /// Returns `true` if the error kind is `CreatePolicyTemplateError::ThrottlingException`.
389    pub fn is_throttling_exception(&self) -> bool {
390        matches!(self, Self::ThrottlingException(_))
391    }
392    /// Returns `true` if the error kind is `CreatePolicyTemplateError::ValidationException`.
393    pub fn is_validation_exception(&self) -> bool {
394        matches!(self, Self::ValidationException(_))
395    }
396}
397impl ::std::error::Error for CreatePolicyTemplateError {
398    fn source(&self) -> ::std::option::Option<&(dyn ::std::error::Error + 'static)> {
399        match self {
400            Self::ConflictException(_inner) => ::std::option::Option::Some(_inner),
401            Self::ResourceNotFoundException(_inner) => ::std::option::Option::Some(_inner),
402            Self::ServiceQuotaExceededException(_inner) => ::std::option::Option::Some(_inner),
403            Self::AccessDeniedException(_inner) => ::std::option::Option::Some(_inner),
404            Self::InternalServerException(_inner) => ::std::option::Option::Some(_inner),
405            Self::ThrottlingException(_inner) => ::std::option::Option::Some(_inner),
406            Self::ValidationException(_inner) => ::std::option::Option::Some(_inner),
407            Self::Unhandled(_inner) => ::std::option::Option::Some(&*_inner.source),
408        }
409    }
410}
411impl ::std::fmt::Display for CreatePolicyTemplateError {
412    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
413        match self {
414            Self::ConflictException(_inner) => _inner.fmt(f),
415            Self::ResourceNotFoundException(_inner) => _inner.fmt(f),
416            Self::ServiceQuotaExceededException(_inner) => _inner.fmt(f),
417            Self::AccessDeniedException(_inner) => _inner.fmt(f),
418            Self::InternalServerException(_inner) => _inner.fmt(f),
419            Self::ThrottlingException(_inner) => _inner.fmt(f),
420            Self::ValidationException(_inner) => _inner.fmt(f),
421            Self::Unhandled(_inner) => {
422                if let ::std::option::Option::Some(code) = ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self) {
423                    write!(f, "unhandled error ({code})")
424                } else {
425                    f.write_str("unhandled error")
426                }
427            }
428        }
429    }
430}
431impl ::aws_smithy_types::retry::ProvideErrorKind for CreatePolicyTemplateError {
432    fn code(&self) -> ::std::option::Option<&str> {
433        ::aws_smithy_types::error::metadata::ProvideErrorMetadata::code(self)
434    }
435    fn retryable_error_kind(&self) -> ::std::option::Option<::aws_smithy_types::retry::ErrorKind> {
436        match self {
437            Self::InternalServerException(inner) => ::std::option::Option::Some(inner.retryable_error_kind()),
438            Self::ThrottlingException(inner) => ::std::option::Option::Some(inner.retryable_error_kind()),
439            _ => ::std::option::Option::None,
440        }
441    }
442}
443impl ::aws_smithy_types::error::metadata::ProvideErrorMetadata for CreatePolicyTemplateError {
444    fn meta(&self) -> &::aws_smithy_types::error::ErrorMetadata {
445        match self {
446            Self::ConflictException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
447            Self::ResourceNotFoundException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
448            Self::ServiceQuotaExceededException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
449            Self::AccessDeniedException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
450            Self::InternalServerException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
451            Self::ThrottlingException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
452            Self::ValidationException(_inner) => ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(_inner),
453            Self::Unhandled(_inner) => &_inner.meta,
454        }
455    }
456}
457impl ::aws_smithy_runtime_api::client::result::CreateUnhandledError for CreatePolicyTemplateError {
458    fn create_unhandled_error(
459        source: ::std::boxed::Box<dyn ::std::error::Error + ::std::marker::Send + ::std::marker::Sync + 'static>,
460        meta: ::std::option::Option<::aws_smithy_types::error::ErrorMetadata>,
461    ) -> Self {
462        Self::Unhandled(crate::error::sealed_unhandled::Unhandled {
463            source,
464            meta: meta.unwrap_or_default(),
465        })
466    }
467}
468impl ::aws_types::request_id::RequestId for crate::operation::create_policy_template::CreatePolicyTemplateError {
469    fn request_id(&self) -> Option<&str> {
470        self.meta().request_id()
471    }
472}
473
474pub use crate::operation::create_policy_template::_create_policy_template_output::CreatePolicyTemplateOutput;
475
476pub use crate::operation::create_policy_template::_create_policy_template_input::CreatePolicyTemplateInput;
477
478mod _create_policy_template_input;
479
480mod _create_policy_template_output;
481
482/// Builders
483pub mod builders;