aws-sdk-datasync 1.109.0

AWS SDK for AWS DataSync
Documentation
// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.

/// <p>CreateTaskRequest</p>
#[non_exhaustive]
#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::fmt::Debug)]
pub struct CreateTaskInput {
    /// <p>Specifies the ARN of your transfer's source location.</p>
    pub source_location_arn: ::std::option::Option<::std::string::String>,
    /// <p>Specifies the ARN of your transfer's destination location.</p>
    pub destination_location_arn: ::std::option::Option<::std::string::String>,
    /// <p>Specifies the Amazon Resource Name (ARN) of an Amazon CloudWatch log group for monitoring your task.</p>
    /// <p>For Enhanced mode tasks, you don't need to specify anything. DataSync automatically sends logs to a CloudWatch log group named <code>/aws/datasync</code>.</p>
    pub cloud_watch_log_group_arn: ::std::option::Option<::std::string::String>,
    /// <p>Specifies the name of your task.</p>
    pub name: ::std::option::Option<::std::string::String>,
    /// <p>Specifies your task's settings, such as preserving file metadata, verifying data integrity, among other options.</p>
    pub options: ::std::option::Option<crate::types::Options>,
    /// <p>Specifies exclude filters that define the files, objects, and folders in your source location that you don't want DataSync to transfer. For more information and examples, see <a href="https://docs.aws.amazon.com/datasync/latest/userguide/filtering.html">Specifying what DataSync transfers by using filters</a>.</p>
    pub excludes: ::std::option::Option<::std::vec::Vec<crate::types::FilterRule>>,
    /// <p>Specifies a schedule for when you want your task to run. For more information, see <a href="https://docs.aws.amazon.com/datasync/latest/userguide/task-scheduling.html">Scheduling your task</a>.</p>
    pub schedule: ::std::option::Option<crate::types::TaskSchedule>,
    /// <p>Specifies the tags that you want to apply to your task.</p>
    /// <p><i>Tags</i> are key-value pairs that help you manage, filter, and search for your DataSync resources.</p>
    pub tags: ::std::option::Option<::std::vec::Vec<crate::types::TagListEntry>>,
    /// <p>Specifies include filters that define the files, objects, and folders in your source location that you want DataSync to transfer. For more information and examples, see <a href="https://docs.aws.amazon.com/datasync/latest/userguide/filtering.html">Specifying what DataSync transfers by using filters</a>.</p>
    pub includes: ::std::option::Option<::std::vec::Vec<crate::types::FilterRule>>,
    /// <p>Configures a manifest, which is a list of files or objects that you want DataSync to transfer. For more information and configuration examples, see <a href="https://docs.aws.amazon.com/datasync/latest/userguide/transferring-with-manifest.html">Specifying what DataSync transfers by using a manifest</a>.</p>
    /// <p>When using this parameter, your caller identity (the role that you're using DataSync with) must have the <code>iam:PassRole</code> permission. The <a href="https://docs.aws.amazon.com/datasync/latest/userguide/security-iam-awsmanpol.html#security-iam-awsmanpol-awsdatasyncfullaccess">AWSDataSyncFullAccess</a> policy includes this permission.</p>
    pub manifest_config: ::std::option::Option<crate::types::ManifestConfig>,
    /// <p>Specifies how you want to configure a task report, which provides detailed information about your DataSync transfer. For more information, see <a href="https://docs.aws.amazon.com/datasync/latest/userguide/task-reports.html">Monitoring your DataSync transfers with task reports</a>.</p>
    /// <p>When using this parameter, your caller identity (the role that you're using DataSync with) must have the <code>iam:PassRole</code> permission. The <a href="https://docs.aws.amazon.com/datasync/latest/userguide/security-iam-awsmanpol.html#security-iam-awsmanpol-awsdatasyncfullaccess">AWSDataSyncFullAccess</a> policy includes this permission.</p>
    pub task_report_config: ::std::option::Option<crate::types::TaskReportConfig>,
    /// <p>Specifies one of the following task modes for your data transfer:</p>
    /// <ul>
    /// <li>
    /// <p><code>ENHANCED</code> - Transfer virtually unlimited numbers of objects with higher performance than Basic mode. Enhanced mode tasks optimize the data transfer process by listing, preparing, transferring, and verifying data in parallel. Enhanced mode is currently available for transfers between Amazon S3 locations, transfers between Azure Blob and Amazon S3 without an agent, and transfers between other clouds and Amazon S3 without an agent.</p><note>
    /// <p>To create an Enhanced mode task, the IAM role that you use to call the <code>CreateTask</code> operation must have the <code>iam:CreateServiceLinkedRole</code> permission.</p>
    /// </note></li>
    /// <li>
    /// <p><code>BASIC</code> (default) - Transfer files or objects between Amazon Web Services storage and all other supported DataSync locations. Basic mode tasks are subject to <a href="https://docs.aws.amazon.com/datasync/latest/userguide/datasync-limits.html">quotas</a> on the number of files, objects, and directories in a dataset. Basic mode sequentially prepares, transfers, and verifies data, making it slower than Enhanced mode for most workloads.</p></li>
    /// </ul>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/datasync/latest/userguide/choosing-task-mode.html#task-mode-differences">Understanding task mode differences</a>.</p>
    pub task_mode: ::std::option::Option<crate::types::TaskMode>,
}
impl CreateTaskInput {
    /// <p>Specifies the ARN of your transfer's source location.</p>
    pub fn source_location_arn(&self) -> ::std::option::Option<&str> {
        self.source_location_arn.as_deref()
    }
    /// <p>Specifies the ARN of your transfer's destination location.</p>
    pub fn destination_location_arn(&self) -> ::std::option::Option<&str> {
        self.destination_location_arn.as_deref()
    }
    /// <p>Specifies the Amazon Resource Name (ARN) of an Amazon CloudWatch log group for monitoring your task.</p>
    /// <p>For Enhanced mode tasks, you don't need to specify anything. DataSync automatically sends logs to a CloudWatch log group named <code>/aws/datasync</code>.</p>
    pub fn cloud_watch_log_group_arn(&self) -> ::std::option::Option<&str> {
        self.cloud_watch_log_group_arn.as_deref()
    }
    /// <p>Specifies the name of your task.</p>
    pub fn name(&self) -> ::std::option::Option<&str> {
        self.name.as_deref()
    }
    /// <p>Specifies your task's settings, such as preserving file metadata, verifying data integrity, among other options.</p>
    pub fn options(&self) -> ::std::option::Option<&crate::types::Options> {
        self.options.as_ref()
    }
    /// <p>Specifies exclude filters that define the files, objects, and folders in your source location that you don't want DataSync to transfer. For more information and examples, see <a href="https://docs.aws.amazon.com/datasync/latest/userguide/filtering.html">Specifying what DataSync transfers by using filters</a>.</p>
    ///
    /// If no value was sent for this field, a default will be set. If you want to determine if no value was sent, use `.excludes.is_none()`.
    pub fn excludes(&self) -> &[crate::types::FilterRule] {
        self.excludes.as_deref().unwrap_or_default()
    }
    /// <p>Specifies a schedule for when you want your task to run. For more information, see <a href="https://docs.aws.amazon.com/datasync/latest/userguide/task-scheduling.html">Scheduling your task</a>.</p>
    pub fn schedule(&self) -> ::std::option::Option<&crate::types::TaskSchedule> {
        self.schedule.as_ref()
    }
    /// <p>Specifies the tags that you want to apply to your task.</p>
    /// <p><i>Tags</i> are key-value pairs that help you manage, filter, and search for your DataSync resources.</p>
    ///
    /// If no value was sent for this field, a default will be set. If you want to determine if no value was sent, use `.tags.is_none()`.
    pub fn tags(&self) -> &[crate::types::TagListEntry] {
        self.tags.as_deref().unwrap_or_default()
    }
    /// <p>Specifies include filters that define the files, objects, and folders in your source location that you want DataSync to transfer. For more information and examples, see <a href="https://docs.aws.amazon.com/datasync/latest/userguide/filtering.html">Specifying what DataSync transfers by using filters</a>.</p>
    ///
    /// If no value was sent for this field, a default will be set. If you want to determine if no value was sent, use `.includes.is_none()`.
    pub fn includes(&self) -> &[crate::types::FilterRule] {
        self.includes.as_deref().unwrap_or_default()
    }
    /// <p>Configures a manifest, which is a list of files or objects that you want DataSync to transfer. For more information and configuration examples, see <a href="https://docs.aws.amazon.com/datasync/latest/userguide/transferring-with-manifest.html">Specifying what DataSync transfers by using a manifest</a>.</p>
    /// <p>When using this parameter, your caller identity (the role that you're using DataSync with) must have the <code>iam:PassRole</code> permission. The <a href="https://docs.aws.amazon.com/datasync/latest/userguide/security-iam-awsmanpol.html#security-iam-awsmanpol-awsdatasyncfullaccess">AWSDataSyncFullAccess</a> policy includes this permission.</p>
    pub fn manifest_config(&self) -> ::std::option::Option<&crate::types::ManifestConfig> {
        self.manifest_config.as_ref()
    }
    /// <p>Specifies how you want to configure a task report, which provides detailed information about your DataSync transfer. For more information, see <a href="https://docs.aws.amazon.com/datasync/latest/userguide/task-reports.html">Monitoring your DataSync transfers with task reports</a>.</p>
    /// <p>When using this parameter, your caller identity (the role that you're using DataSync with) must have the <code>iam:PassRole</code> permission. The <a href="https://docs.aws.amazon.com/datasync/latest/userguide/security-iam-awsmanpol.html#security-iam-awsmanpol-awsdatasyncfullaccess">AWSDataSyncFullAccess</a> policy includes this permission.</p>
    pub fn task_report_config(&self) -> ::std::option::Option<&crate::types::TaskReportConfig> {
        self.task_report_config.as_ref()
    }
    /// <p>Specifies one of the following task modes for your data transfer:</p>
    /// <ul>
    /// <li>
    /// <p><code>ENHANCED</code> - Transfer virtually unlimited numbers of objects with higher performance than Basic mode. Enhanced mode tasks optimize the data transfer process by listing, preparing, transferring, and verifying data in parallel. Enhanced mode is currently available for transfers between Amazon S3 locations, transfers between Azure Blob and Amazon S3 without an agent, and transfers between other clouds and Amazon S3 without an agent.</p><note>
    /// <p>To create an Enhanced mode task, the IAM role that you use to call the <code>CreateTask</code> operation must have the <code>iam:CreateServiceLinkedRole</code> permission.</p>
    /// </note></li>
    /// <li>
    /// <p><code>BASIC</code> (default) - Transfer files or objects between Amazon Web Services storage and all other supported DataSync locations. Basic mode tasks are subject to <a href="https://docs.aws.amazon.com/datasync/latest/userguide/datasync-limits.html">quotas</a> on the number of files, objects, and directories in a dataset. Basic mode sequentially prepares, transfers, and verifies data, making it slower than Enhanced mode for most workloads.</p></li>
    /// </ul>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/datasync/latest/userguide/choosing-task-mode.html#task-mode-differences">Understanding task mode differences</a>.</p>
    pub fn task_mode(&self) -> ::std::option::Option<&crate::types::TaskMode> {
        self.task_mode.as_ref()
    }
}
impl CreateTaskInput {
    /// Creates a new builder-style object to manufacture [`CreateTaskInput`](crate::operation::create_task::CreateTaskInput).
    pub fn builder() -> crate::operation::create_task::builders::CreateTaskInputBuilder {
        crate::operation::create_task::builders::CreateTaskInputBuilder::default()
    }
}

/// A builder for [`CreateTaskInput`](crate::operation::create_task::CreateTaskInput).
#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::default::Default, ::std::fmt::Debug)]
#[non_exhaustive]
pub struct CreateTaskInputBuilder {
    pub(crate) source_location_arn: ::std::option::Option<::std::string::String>,
    pub(crate) destination_location_arn: ::std::option::Option<::std::string::String>,
    pub(crate) cloud_watch_log_group_arn: ::std::option::Option<::std::string::String>,
    pub(crate) name: ::std::option::Option<::std::string::String>,
    pub(crate) options: ::std::option::Option<crate::types::Options>,
    pub(crate) excludes: ::std::option::Option<::std::vec::Vec<crate::types::FilterRule>>,
    pub(crate) schedule: ::std::option::Option<crate::types::TaskSchedule>,
    pub(crate) tags: ::std::option::Option<::std::vec::Vec<crate::types::TagListEntry>>,
    pub(crate) includes: ::std::option::Option<::std::vec::Vec<crate::types::FilterRule>>,
    pub(crate) manifest_config: ::std::option::Option<crate::types::ManifestConfig>,
    pub(crate) task_report_config: ::std::option::Option<crate::types::TaskReportConfig>,
    pub(crate) task_mode: ::std::option::Option<crate::types::TaskMode>,
}
impl CreateTaskInputBuilder {
    /// <p>Specifies the ARN of your transfer's source location.</p>
    /// This field is required.
    pub fn source_location_arn(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
        self.source_location_arn = ::std::option::Option::Some(input.into());
        self
    }
    /// <p>Specifies the ARN of your transfer's source location.</p>
    pub fn set_source_location_arn(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
        self.source_location_arn = input;
        self
    }
    /// <p>Specifies the ARN of your transfer's source location.</p>
    pub fn get_source_location_arn(&self) -> &::std::option::Option<::std::string::String> {
        &self.source_location_arn
    }
    /// <p>Specifies the ARN of your transfer's destination location.</p>
    /// This field is required.
    pub fn destination_location_arn(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
        self.destination_location_arn = ::std::option::Option::Some(input.into());
        self
    }
    /// <p>Specifies the ARN of your transfer's destination location.</p>
    pub fn set_destination_location_arn(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
        self.destination_location_arn = input;
        self
    }
    /// <p>Specifies the ARN of your transfer's destination location.</p>
    pub fn get_destination_location_arn(&self) -> &::std::option::Option<::std::string::String> {
        &self.destination_location_arn
    }
    /// <p>Specifies the Amazon Resource Name (ARN) of an Amazon CloudWatch log group for monitoring your task.</p>
    /// <p>For Enhanced mode tasks, you don't need to specify anything. DataSync automatically sends logs to a CloudWatch log group named <code>/aws/datasync</code>.</p>
    pub fn cloud_watch_log_group_arn(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
        self.cloud_watch_log_group_arn = ::std::option::Option::Some(input.into());
        self
    }
    /// <p>Specifies the Amazon Resource Name (ARN) of an Amazon CloudWatch log group for monitoring your task.</p>
    /// <p>For Enhanced mode tasks, you don't need to specify anything. DataSync automatically sends logs to a CloudWatch log group named <code>/aws/datasync</code>.</p>
    pub fn set_cloud_watch_log_group_arn(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
        self.cloud_watch_log_group_arn = input;
        self
    }
    /// <p>Specifies the Amazon Resource Name (ARN) of an Amazon CloudWatch log group for monitoring your task.</p>
    /// <p>For Enhanced mode tasks, you don't need to specify anything. DataSync automatically sends logs to a CloudWatch log group named <code>/aws/datasync</code>.</p>
    pub fn get_cloud_watch_log_group_arn(&self) -> &::std::option::Option<::std::string::String> {
        &self.cloud_watch_log_group_arn
    }
    /// <p>Specifies the name of your task.</p>
    pub fn name(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
        self.name = ::std::option::Option::Some(input.into());
        self
    }
    /// <p>Specifies the name of your task.</p>
    pub fn set_name(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
        self.name = input;
        self
    }
    /// <p>Specifies the name of your task.</p>
    pub fn get_name(&self) -> &::std::option::Option<::std::string::String> {
        &self.name
    }
    /// <p>Specifies your task's settings, such as preserving file metadata, verifying data integrity, among other options.</p>
    pub fn options(mut self, input: crate::types::Options) -> Self {
        self.options = ::std::option::Option::Some(input);
        self
    }
    /// <p>Specifies your task's settings, such as preserving file metadata, verifying data integrity, among other options.</p>
    pub fn set_options(mut self, input: ::std::option::Option<crate::types::Options>) -> Self {
        self.options = input;
        self
    }
    /// <p>Specifies your task's settings, such as preserving file metadata, verifying data integrity, among other options.</p>
    pub fn get_options(&self) -> &::std::option::Option<crate::types::Options> {
        &self.options
    }
    /// Appends an item to `excludes`.
    ///
    /// To override the contents of this collection use [`set_excludes`](Self::set_excludes).
    ///
    /// <p>Specifies exclude filters that define the files, objects, and folders in your source location that you don't want DataSync to transfer. For more information and examples, see <a href="https://docs.aws.amazon.com/datasync/latest/userguide/filtering.html">Specifying what DataSync transfers by using filters</a>.</p>
    pub fn excludes(mut self, input: crate::types::FilterRule) -> Self {
        let mut v = self.excludes.unwrap_or_default();
        v.push(input);
        self.excludes = ::std::option::Option::Some(v);
        self
    }
    /// <p>Specifies exclude filters that define the files, objects, and folders in your source location that you don't want DataSync to transfer. For more information and examples, see <a href="https://docs.aws.amazon.com/datasync/latest/userguide/filtering.html">Specifying what DataSync transfers by using filters</a>.</p>
    pub fn set_excludes(mut self, input: ::std::option::Option<::std::vec::Vec<crate::types::FilterRule>>) -> Self {
        self.excludes = input;
        self
    }
    /// <p>Specifies exclude filters that define the files, objects, and folders in your source location that you don't want DataSync to transfer. For more information and examples, see <a href="https://docs.aws.amazon.com/datasync/latest/userguide/filtering.html">Specifying what DataSync transfers by using filters</a>.</p>
    pub fn get_excludes(&self) -> &::std::option::Option<::std::vec::Vec<crate::types::FilterRule>> {
        &self.excludes
    }
    /// <p>Specifies a schedule for when you want your task to run. For more information, see <a href="https://docs.aws.amazon.com/datasync/latest/userguide/task-scheduling.html">Scheduling your task</a>.</p>
    pub fn schedule(mut self, input: crate::types::TaskSchedule) -> Self {
        self.schedule = ::std::option::Option::Some(input);
        self
    }
    /// <p>Specifies a schedule for when you want your task to run. For more information, see <a href="https://docs.aws.amazon.com/datasync/latest/userguide/task-scheduling.html">Scheduling your task</a>.</p>
    pub fn set_schedule(mut self, input: ::std::option::Option<crate::types::TaskSchedule>) -> Self {
        self.schedule = input;
        self
    }
    /// <p>Specifies a schedule for when you want your task to run. For more information, see <a href="https://docs.aws.amazon.com/datasync/latest/userguide/task-scheduling.html">Scheduling your task</a>.</p>
    pub fn get_schedule(&self) -> &::std::option::Option<crate::types::TaskSchedule> {
        &self.schedule
    }
    /// Appends an item to `tags`.
    ///
    /// To override the contents of this collection use [`set_tags`](Self::set_tags).
    ///
    /// <p>Specifies the tags that you want to apply to your task.</p>
    /// <p><i>Tags</i> are key-value pairs that help you manage, filter, and search for your DataSync resources.</p>
    pub fn tags(mut self, input: crate::types::TagListEntry) -> Self {
        let mut v = self.tags.unwrap_or_default();
        v.push(input);
        self.tags = ::std::option::Option::Some(v);
        self
    }
    /// <p>Specifies the tags that you want to apply to your task.</p>
    /// <p><i>Tags</i> are key-value pairs that help you manage, filter, and search for your DataSync resources.</p>
    pub fn set_tags(mut self, input: ::std::option::Option<::std::vec::Vec<crate::types::TagListEntry>>) -> Self {
        self.tags = input;
        self
    }
    /// <p>Specifies the tags that you want to apply to your task.</p>
    /// <p><i>Tags</i> are key-value pairs that help you manage, filter, and search for your DataSync resources.</p>
    pub fn get_tags(&self) -> &::std::option::Option<::std::vec::Vec<crate::types::TagListEntry>> {
        &self.tags
    }
    /// Appends an item to `includes`.
    ///
    /// To override the contents of this collection use [`set_includes`](Self::set_includes).
    ///
    /// <p>Specifies include filters that define the files, objects, and folders in your source location that you want DataSync to transfer. For more information and examples, see <a href="https://docs.aws.amazon.com/datasync/latest/userguide/filtering.html">Specifying what DataSync transfers by using filters</a>.</p>
    pub fn includes(mut self, input: crate::types::FilterRule) -> Self {
        let mut v = self.includes.unwrap_or_default();
        v.push(input);
        self.includes = ::std::option::Option::Some(v);
        self
    }
    /// <p>Specifies include filters that define the files, objects, and folders in your source location that you want DataSync to transfer. For more information and examples, see <a href="https://docs.aws.amazon.com/datasync/latest/userguide/filtering.html">Specifying what DataSync transfers by using filters</a>.</p>
    pub fn set_includes(mut self, input: ::std::option::Option<::std::vec::Vec<crate::types::FilterRule>>) -> Self {
        self.includes = input;
        self
    }
    /// <p>Specifies include filters that define the files, objects, and folders in your source location that you want DataSync to transfer. For more information and examples, see <a href="https://docs.aws.amazon.com/datasync/latest/userguide/filtering.html">Specifying what DataSync transfers by using filters</a>.</p>
    pub fn get_includes(&self) -> &::std::option::Option<::std::vec::Vec<crate::types::FilterRule>> {
        &self.includes
    }
    /// <p>Configures a manifest, which is a list of files or objects that you want DataSync to transfer. For more information and configuration examples, see <a href="https://docs.aws.amazon.com/datasync/latest/userguide/transferring-with-manifest.html">Specifying what DataSync transfers by using a manifest</a>.</p>
    /// <p>When using this parameter, your caller identity (the role that you're using DataSync with) must have the <code>iam:PassRole</code> permission. The <a href="https://docs.aws.amazon.com/datasync/latest/userguide/security-iam-awsmanpol.html#security-iam-awsmanpol-awsdatasyncfullaccess">AWSDataSyncFullAccess</a> policy includes this permission.</p>
    pub fn manifest_config(mut self, input: crate::types::ManifestConfig) -> Self {
        self.manifest_config = ::std::option::Option::Some(input);
        self
    }
    /// <p>Configures a manifest, which is a list of files or objects that you want DataSync to transfer. For more information and configuration examples, see <a href="https://docs.aws.amazon.com/datasync/latest/userguide/transferring-with-manifest.html">Specifying what DataSync transfers by using a manifest</a>.</p>
    /// <p>When using this parameter, your caller identity (the role that you're using DataSync with) must have the <code>iam:PassRole</code> permission. The <a href="https://docs.aws.amazon.com/datasync/latest/userguide/security-iam-awsmanpol.html#security-iam-awsmanpol-awsdatasyncfullaccess">AWSDataSyncFullAccess</a> policy includes this permission.</p>
    pub fn set_manifest_config(mut self, input: ::std::option::Option<crate::types::ManifestConfig>) -> Self {
        self.manifest_config = input;
        self
    }
    /// <p>Configures a manifest, which is a list of files or objects that you want DataSync to transfer. For more information and configuration examples, see <a href="https://docs.aws.amazon.com/datasync/latest/userguide/transferring-with-manifest.html">Specifying what DataSync transfers by using a manifest</a>.</p>
    /// <p>When using this parameter, your caller identity (the role that you're using DataSync with) must have the <code>iam:PassRole</code> permission. The <a href="https://docs.aws.amazon.com/datasync/latest/userguide/security-iam-awsmanpol.html#security-iam-awsmanpol-awsdatasyncfullaccess">AWSDataSyncFullAccess</a> policy includes this permission.</p>
    pub fn get_manifest_config(&self) -> &::std::option::Option<crate::types::ManifestConfig> {
        &self.manifest_config
    }
    /// <p>Specifies how you want to configure a task report, which provides detailed information about your DataSync transfer. For more information, see <a href="https://docs.aws.amazon.com/datasync/latest/userguide/task-reports.html">Monitoring your DataSync transfers with task reports</a>.</p>
    /// <p>When using this parameter, your caller identity (the role that you're using DataSync with) must have the <code>iam:PassRole</code> permission. The <a href="https://docs.aws.amazon.com/datasync/latest/userguide/security-iam-awsmanpol.html#security-iam-awsmanpol-awsdatasyncfullaccess">AWSDataSyncFullAccess</a> policy includes this permission.</p>
    pub fn task_report_config(mut self, input: crate::types::TaskReportConfig) -> Self {
        self.task_report_config = ::std::option::Option::Some(input);
        self
    }
    /// <p>Specifies how you want to configure a task report, which provides detailed information about your DataSync transfer. For more information, see <a href="https://docs.aws.amazon.com/datasync/latest/userguide/task-reports.html">Monitoring your DataSync transfers with task reports</a>.</p>
    /// <p>When using this parameter, your caller identity (the role that you're using DataSync with) must have the <code>iam:PassRole</code> permission. The <a href="https://docs.aws.amazon.com/datasync/latest/userguide/security-iam-awsmanpol.html#security-iam-awsmanpol-awsdatasyncfullaccess">AWSDataSyncFullAccess</a> policy includes this permission.</p>
    pub fn set_task_report_config(mut self, input: ::std::option::Option<crate::types::TaskReportConfig>) -> Self {
        self.task_report_config = input;
        self
    }
    /// <p>Specifies how you want to configure a task report, which provides detailed information about your DataSync transfer. For more information, see <a href="https://docs.aws.amazon.com/datasync/latest/userguide/task-reports.html">Monitoring your DataSync transfers with task reports</a>.</p>
    /// <p>When using this parameter, your caller identity (the role that you're using DataSync with) must have the <code>iam:PassRole</code> permission. The <a href="https://docs.aws.amazon.com/datasync/latest/userguide/security-iam-awsmanpol.html#security-iam-awsmanpol-awsdatasyncfullaccess">AWSDataSyncFullAccess</a> policy includes this permission.</p>
    pub fn get_task_report_config(&self) -> &::std::option::Option<crate::types::TaskReportConfig> {
        &self.task_report_config
    }
    /// <p>Specifies one of the following task modes for your data transfer:</p>
    /// <ul>
    /// <li>
    /// <p><code>ENHANCED</code> - Transfer virtually unlimited numbers of objects with higher performance than Basic mode. Enhanced mode tasks optimize the data transfer process by listing, preparing, transferring, and verifying data in parallel. Enhanced mode is currently available for transfers between Amazon S3 locations, transfers between Azure Blob and Amazon S3 without an agent, and transfers between other clouds and Amazon S3 without an agent.</p><note>
    /// <p>To create an Enhanced mode task, the IAM role that you use to call the <code>CreateTask</code> operation must have the <code>iam:CreateServiceLinkedRole</code> permission.</p>
    /// </note></li>
    /// <li>
    /// <p><code>BASIC</code> (default) - Transfer files or objects between Amazon Web Services storage and all other supported DataSync locations. Basic mode tasks are subject to <a href="https://docs.aws.amazon.com/datasync/latest/userguide/datasync-limits.html">quotas</a> on the number of files, objects, and directories in a dataset. Basic mode sequentially prepares, transfers, and verifies data, making it slower than Enhanced mode for most workloads.</p></li>
    /// </ul>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/datasync/latest/userguide/choosing-task-mode.html#task-mode-differences">Understanding task mode differences</a>.</p>
    pub fn task_mode(mut self, input: crate::types::TaskMode) -> Self {
        self.task_mode = ::std::option::Option::Some(input);
        self
    }
    /// <p>Specifies one of the following task modes for your data transfer:</p>
    /// <ul>
    /// <li>
    /// <p><code>ENHANCED</code> - Transfer virtually unlimited numbers of objects with higher performance than Basic mode. Enhanced mode tasks optimize the data transfer process by listing, preparing, transferring, and verifying data in parallel. Enhanced mode is currently available for transfers between Amazon S3 locations, transfers between Azure Blob and Amazon S3 without an agent, and transfers between other clouds and Amazon S3 without an agent.</p><note>
    /// <p>To create an Enhanced mode task, the IAM role that you use to call the <code>CreateTask</code> operation must have the <code>iam:CreateServiceLinkedRole</code> permission.</p>
    /// </note></li>
    /// <li>
    /// <p><code>BASIC</code> (default) - Transfer files or objects between Amazon Web Services storage and all other supported DataSync locations. Basic mode tasks are subject to <a href="https://docs.aws.amazon.com/datasync/latest/userguide/datasync-limits.html">quotas</a> on the number of files, objects, and directories in a dataset. Basic mode sequentially prepares, transfers, and verifies data, making it slower than Enhanced mode for most workloads.</p></li>
    /// </ul>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/datasync/latest/userguide/choosing-task-mode.html#task-mode-differences">Understanding task mode differences</a>.</p>
    pub fn set_task_mode(mut self, input: ::std::option::Option<crate::types::TaskMode>) -> Self {
        self.task_mode = input;
        self
    }
    /// <p>Specifies one of the following task modes for your data transfer:</p>
    /// <ul>
    /// <li>
    /// <p><code>ENHANCED</code> - Transfer virtually unlimited numbers of objects with higher performance than Basic mode. Enhanced mode tasks optimize the data transfer process by listing, preparing, transferring, and verifying data in parallel. Enhanced mode is currently available for transfers between Amazon S3 locations, transfers between Azure Blob and Amazon S3 without an agent, and transfers between other clouds and Amazon S3 without an agent.</p><note>
    /// <p>To create an Enhanced mode task, the IAM role that you use to call the <code>CreateTask</code> operation must have the <code>iam:CreateServiceLinkedRole</code> permission.</p>
    /// </note></li>
    /// <li>
    /// <p><code>BASIC</code> (default) - Transfer files or objects between Amazon Web Services storage and all other supported DataSync locations. Basic mode tasks are subject to <a href="https://docs.aws.amazon.com/datasync/latest/userguide/datasync-limits.html">quotas</a> on the number of files, objects, and directories in a dataset. Basic mode sequentially prepares, transfers, and verifies data, making it slower than Enhanced mode for most workloads.</p></li>
    /// </ul>
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/datasync/latest/userguide/choosing-task-mode.html#task-mode-differences">Understanding task mode differences</a>.</p>
    pub fn get_task_mode(&self) -> &::std::option::Option<crate::types::TaskMode> {
        &self.task_mode
    }
    /// Consumes the builder and constructs a [`CreateTaskInput`](crate::operation::create_task::CreateTaskInput).
    pub fn build(self) -> ::std::result::Result<crate::operation::create_task::CreateTaskInput, ::aws_smithy_types::error::operation::BuildError> {
        ::std::result::Result::Ok(crate::operation::create_task::CreateTaskInput {
            source_location_arn: self.source_location_arn,
            destination_location_arn: self.destination_location_arn,
            cloud_watch_log_group_arn: self.cloud_watch_log_group_arn,
            name: self.name,
            options: self.options,
            excludes: self.excludes,
            schedule: self.schedule,
            tags: self.tags,
            includes: self.includes,
            manifest_config: self.manifest_config,
            task_report_config: self.task_report_config,
            task_mode: self.task_mode,
        })
    }
}