/**
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 * SPDX-License-Identifier: Apache-2.0.
 */

#pragma once
#include <aws/databrew/GlueDataBrew_EXPORTS.h>
#include <aws/core/utils/memory/stl/AWSString.h>
#include <utility>

namespace Aws
{
namespace Utils
{
namespace Json
{
  class JsonValue;
  class JsonView;
} // namespace Json
} // namespace Utils
namespace GlueDataBrew
{
namespace Model
{

  /**
   * <p>Represents additional options for correct interpretation of datetime
   * parameters used in the Amazon S3 path of a dataset.</p><p><h3>See Also:</h3>  
   * <a
   * href="http://docs.aws.amazon.com/goto/WebAPI/databrew-2017-07-25/DatetimeOptions">AWS
   * API Reference</a></p>
   */
  class DatetimeOptions
  {
  public:
    AWS_GLUEDATABREW_API DatetimeOptions();
    AWS_GLUEDATABREW_API DatetimeOptions(Aws::Utils::Json::JsonView jsonValue);
    AWS_GLUEDATABREW_API DatetimeOptions& operator=(Aws::Utils::Json::JsonView jsonValue);
    AWS_GLUEDATABREW_API Aws::Utils::Json::JsonValue Jsonize() const;


    /**
     * <p>Required option, that defines the datetime format used for a date parameter
     * in the Amazon S3 path. Should use only supported datetime specifiers and
     * separation characters, all literal a-z or A-Z characters should be escaped with
     * single quotes. E.g. "MM.dd.yyyy-'at'-HH:mm".</p>
     */
    inline const Aws::String& GetFormat() const{ return m_format; }

    /**
     * <p>Required option, that defines the datetime format used for a date parameter
     * in the Amazon S3 path. Should use only supported datetime specifiers and
     * separation characters, all literal a-z or A-Z characters should be escaped with
     * single quotes. E.g. "MM.dd.yyyy-'at'-HH:mm".</p>
     */
    inline bool FormatHasBeenSet() const { return m_formatHasBeenSet; }

    /**
     * <p>Required option, that defines the datetime format used for a date parameter
     * in the Amazon S3 path. Should use only supported datetime specifiers and
     * separation characters, all literal a-z or A-Z characters should be escaped with
     * single quotes. E.g. "MM.dd.yyyy-'at'-HH:mm".</p>
     */
    inline void SetFormat(const Aws::String& value) { m_formatHasBeenSet = true; m_format = value; }

    /**
     * <p>Required option, that defines the datetime format used for a date parameter
     * in the Amazon S3 path. Should use only supported datetime specifiers and
     * separation characters, all literal a-z or A-Z characters should be escaped with
     * single quotes. E.g. "MM.dd.yyyy-'at'-HH:mm".</p>
     */
    inline void SetFormat(Aws::String&& value) { m_formatHasBeenSet = true; m_format = std::move(value); }

    /**
     * <p>Required option, that defines the datetime format used for a date parameter
     * in the Amazon S3 path. Should use only supported datetime specifiers and
     * separation characters, all literal a-z or A-Z characters should be escaped with
     * single quotes. E.g. "MM.dd.yyyy-'at'-HH:mm".</p>
     */
    inline void SetFormat(const char* value) { m_formatHasBeenSet = true; m_format.assign(value); }

    /**
     * <p>Required option, that defines the datetime format used for a date parameter
     * in the Amazon S3 path. Should use only supported datetime specifiers and
     * separation characters, all literal a-z or A-Z characters should be escaped with
     * single quotes. E.g. "MM.dd.yyyy-'at'-HH:mm".</p>
     */
    inline DatetimeOptions& WithFormat(const Aws::String& value) { SetFormat(value); return *this;}

    /**
     * <p>Required option, that defines the datetime format used for a date parameter
     * in the Amazon S3 path. Should use only supported datetime specifiers and
     * separation characters, all literal a-z or A-Z characters should be escaped with
     * single quotes. E.g. "MM.dd.yyyy-'at'-HH:mm".</p>
     */
    inline DatetimeOptions& WithFormat(Aws::String&& value) { SetFormat(std::move(value)); return *this;}

    /**
     * <p>Required option, that defines the datetime format used for a date parameter
     * in the Amazon S3 path. Should use only supported datetime specifiers and
     * separation characters, all literal a-z or A-Z characters should be escaped with
     * single quotes. E.g. "MM.dd.yyyy-'at'-HH:mm".</p>
     */
    inline DatetimeOptions& WithFormat(const char* value) { SetFormat(value); return *this;}


    /**
     * <p>Optional value for a timezone offset of the datetime parameter value in the
     * Amazon S3 path. Shouldn't be used if Format for this parameter includes timezone
     * fields. If no offset specified, UTC is assumed.</p>
     */
    inline const Aws::String& GetTimezoneOffset() const{ return m_timezoneOffset; }

    /**
     * <p>Optional value for a timezone offset of the datetime parameter value in the
     * Amazon S3 path. Shouldn't be used if Format for this parameter includes timezone
     * fields. If no offset specified, UTC is assumed.</p>
     */
    inline bool TimezoneOffsetHasBeenSet() const { return m_timezoneOffsetHasBeenSet; }

    /**
     * <p>Optional value for a timezone offset of the datetime parameter value in the
     * Amazon S3 path. Shouldn't be used if Format for this parameter includes timezone
     * fields. If no offset specified, UTC is assumed.</p>
     */
    inline void SetTimezoneOffset(const Aws::String& value) { m_timezoneOffsetHasBeenSet = true; m_timezoneOffset = value; }

    /**
     * <p>Optional value for a timezone offset of the datetime parameter value in the
     * Amazon S3 path. Shouldn't be used if Format for this parameter includes timezone
     * fields. If no offset specified, UTC is assumed.</p>
     */
    inline void SetTimezoneOffset(Aws::String&& value) { m_timezoneOffsetHasBeenSet = true; m_timezoneOffset = std::move(value); }

    /**
     * <p>Optional value for a timezone offset of the datetime parameter value in the
     * Amazon S3 path. Shouldn't be used if Format for this parameter includes timezone
     * fields. If no offset specified, UTC is assumed.</p>
     */
    inline void SetTimezoneOffset(const char* value) { m_timezoneOffsetHasBeenSet = true; m_timezoneOffset.assign(value); }

    /**
     * <p>Optional value for a timezone offset of the datetime parameter value in the
     * Amazon S3 path. Shouldn't be used if Format for this parameter includes timezone
     * fields. If no offset specified, UTC is assumed.</p>
     */
    inline DatetimeOptions& WithTimezoneOffset(const Aws::String& value) { SetTimezoneOffset(value); return *this;}

    /**
     * <p>Optional value for a timezone offset of the datetime parameter value in the
     * Amazon S3 path. Shouldn't be used if Format for this parameter includes timezone
     * fields. If no offset specified, UTC is assumed.</p>
     */
    inline DatetimeOptions& WithTimezoneOffset(Aws::String&& value) { SetTimezoneOffset(std::move(value)); return *this;}

    /**
     * <p>Optional value for a timezone offset of the datetime parameter value in the
     * Amazon S3 path. Shouldn't be used if Format for this parameter includes timezone
     * fields. If no offset specified, UTC is assumed.</p>
     */
    inline DatetimeOptions& WithTimezoneOffset(const char* value) { SetTimezoneOffset(value); return *this;}


    /**
     * <p>Optional value for a non-US locale code, needed for correct interpretation of
     * some date formats.</p>
     */
    inline const Aws::String& GetLocaleCode() const{ return m_localeCode; }

    /**
     * <p>Optional value for a non-US locale code, needed for correct interpretation of
     * some date formats.</p>
     */
    inline bool LocaleCodeHasBeenSet() const { return m_localeCodeHasBeenSet; }

    /**
     * <p>Optional value for a non-US locale code, needed for correct interpretation of
     * some date formats.</p>
     */
    inline void SetLocaleCode(const Aws::String& value) { m_localeCodeHasBeenSet = true; m_localeCode = value; }

    /**
     * <p>Optional value for a non-US locale code, needed for correct interpretation of
     * some date formats.</p>
     */
    inline void SetLocaleCode(Aws::String&& value) { m_localeCodeHasBeenSet = true; m_localeCode = std::move(value); }

    /**
     * <p>Optional value for a non-US locale code, needed for correct interpretation of
     * some date formats.</p>
     */
    inline void SetLocaleCode(const char* value) { m_localeCodeHasBeenSet = true; m_localeCode.assign(value); }

    /**
     * <p>Optional value for a non-US locale code, needed for correct interpretation of
     * some date formats.</p>
     */
    inline DatetimeOptions& WithLocaleCode(const Aws::String& value) { SetLocaleCode(value); return *this;}

    /**
     * <p>Optional value for a non-US locale code, needed for correct interpretation of
     * some date formats.</p>
     */
    inline DatetimeOptions& WithLocaleCode(Aws::String&& value) { SetLocaleCode(std::move(value)); return *this;}

    /**
     * <p>Optional value for a non-US locale code, needed for correct interpretation of
     * some date formats.</p>
     */
    inline DatetimeOptions& WithLocaleCode(const char* value) { SetLocaleCode(value); return *this;}

  private:

    Aws::String m_format;
    bool m_formatHasBeenSet = false;

    Aws::String m_timezoneOffset;
    bool m_timezoneOffsetHasBeenSet = false;

    Aws::String m_localeCode;
    bool m_localeCodeHasBeenSet = false;
  };

} // namespace Model
} // namespace GlueDataBrew
} // namespace Aws