You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: _webhook_definition.rs
    path of file: ./repos/aws-sdk-rust/sdk/codepipeline/src/types
    
    the code of the file until where you have to start completion: // Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.

/// <p>Represents information about a webhook and its definition.</p>
#[non_exhaustive]
#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::fmt::Debug)]
pub struct WebhookDefinition {
    /// <p>The name of the webhook.</p>
    pub name: ::std::string::String,
    /// <p>The name of the pipeline you want to connect to the webhook.</p>
    pub target_pipeline: ::std::string::String,
    /// <p>The name of the action in a pipeline you want to connect to the webhook. The action must be from the source (first) stage of the pipeline.</p>
    pub target_action: ::std::string::String,
    /// <p>A list of rules applied to the body/payload sent in the POST request to a webhook URL. All defined rules must pass for the request to be accepted and the pipeline started.</p>
    pub filters: ::std::vec::Vec<crate::types::WebhookFilterRule>,
    /// <p>Supported options are GITHUB_HMAC, IP, and UNAUTHENTICATED.</p>
    /// <ul>
    /// <li>
    /// <p>For information about the authentication scheme implemented by GITHUB_HMAC, see <a href="https://developer.github.com/webhooks/securing/">Securing your webhooks</a> on the GitHub Developer website.</p></li>
    /// <li>
    /// <p>IP rejects webhooks trigger requests unless they originate from an IP address in the IP range whitelisted in the authentication configuration.</p></li>
    /// <li>
    /// <p>UNAUTHENTICATED accepts all webhook trigger requests regardless of origin.</p></li>
    /// </ul>
    pub authentication: crate::t
    
    pub fn build(self) -> ::std::result::Result<crate::types::WebhookDefinition, ::aws_smithy_types::error::operation::BuildError> {
        ::std::result::Result::Ok(crate::types::WebhookDefinition {
            name: self.name.ok_or_else(|| {
                ::aws_smithy_types::error::operation::BuildError::missing_field(
                    "name",
                    "name was not specified but it is required when building WebhookDefinition",
                )
            })?,
            target_pipeline: self.target_pipeline.ok_or_else(|| {
                ::aws_smithy_types::error::operation::BuildError::missing_field(
                    "target_pipeline",
                    "target_pipeline was not specified but it is required when building WebhookDefinition",
                )
            })?,
            target_action: self.target_action.ok_or_else(|| {
                ::aws_smithy_types::error::operation::BuildError::missing_field(
                    "target_action",
                    "target_action was not specified but it is required when building WebhookDefinition",
                )
            })?,
            filters: self.filters.ok_or_else(|| {
                ::aws_smithy_types::error::operation::BuildError::missing_field(
                    "filters",
                    "filters was not specified but it is required when building WebhookDefinition",
                )
            })?,
            authentication: self.authentication.ok_or_else(|| {
                ::aws_smithy_types::error::operation::BuildError::missing_field(
                    "authentication",
                    "authentication was not specified but it is required when building WebhookDefinition",
                )
            })?,
            authentication_configuration: self.authentication_configuration,
        })
    }