# WARNING ABOUT GENERATED CODE
#
# This file is generated. See the contributing guide for more information:
# https://github.com/aws/aws-sdk-ruby/blob/version-3/CONTRIBUTING.md
#
# WARNING ABOUT GENERATED CODE

module Aws
  module IAM
    # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/IAM/User.html
    class User
      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/IAM/User.html#initialize-instance_method
      def initialize: (String name, Hash[Symbol, untyped] options) -> void
                    | (name: String, ?client: Client) -> void
                    | (Hash[Symbol, untyped] args) -> void

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/IAM/User.html#name-instance_method
      def name: () -> String
      alias user_name name

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/IAM/User.html#path-instance_method
      def path: () -> ::String

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/IAM/User.html#user_id-instance_method
      def user_id: () -> ::String

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/IAM/User.html#arn-instance_method
      def arn: () -> ::String

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/IAM/User.html#create_date-instance_method
      def create_date: () -> ::Time

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/IAM/User.html#password_last_used-instance_method
      def password_last_used: () -> ::Time

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/IAM/User.html#permissions_boundary-instance_method
      def permissions_boundary: () -> Types::AttachedPermissionsBoundary

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/IAM/User.html#tags-instance_method
      def tags: () -> ::Array[Types::Tag]

      def client: () -> Client

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/IAM/User.html#load-instance_method
      def load: () -> self
      alias reload load

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/IAM/User.html#data-instance_method
      def data: () -> Types::User

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/IAM/User.html#data_loaded?-instance_method
      def data_loaded?: () -> bool

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/IAM/User.html#exists?-instance_method
      def exists?: (?max_attempts: Integer, ?delay: Numeric, ?before_attempt: (^(Integer attempts) -> void), ?before_wait: (^(Integer attempts, untyped response) -> void)) -> bool
                 | (?Hash[Symbol, untyped]) -> bool

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/IAM/User.html#wait_until_exists-instance_method
      def wait_until_exists: (?max_attempts: Integer, ?delay: Numeric, ?before_attempt: (^(Integer attempts) -> void), ?before_wait: (^(Integer attempts, untyped response) -> void)) ?{ (untyped waiter) -> void } -> User
                           | (?Hash[Symbol, untyped]) ?{ (untyped waiter) -> void } -> User

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/IAM/User.html#add_group-instance_method
      def add_group: (
                       group_name: ::String
                     ) -> ::Aws::EmptyStructure
                   | (?Hash[Symbol, untyped]) -> ::Aws::EmptyStructure

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/IAM/User.html#attach_policy-instance_method
      def attach_policy: (
                           policy_arn: ::String
                         ) -> ::Aws::EmptyStructure
                       | (?Hash[Symbol, untyped]) -> ::Aws::EmptyStructure

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/IAM/User.html#create-instance_method
      def create: (
                    ?path: ::String,
                    ?permissions_boundary: ::String,
                    ?tags: Array[
                      {
                        key: ::String,
                        value: ::String
                      },
                    ]
                  ) -> User
                | (?Hash[Symbol, untyped]) -> User

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/IAM/User.html#create_access_key_pair-instance_method
      def create_access_key_pair: (
                                  ) -> AccessKeyPair
                                | (?Hash[Symbol, untyped]) -> AccessKeyPair

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/IAM/User.html#create_login_profile-instance_method
      def create_login_profile: (
                                  ?password: ::String,
                                  ?password_reset_required: bool
                                ) -> LoginProfile
                              | (?Hash[Symbol, untyped]) -> LoginProfile

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/IAM/User.html#create_policy-instance_method
      def create_policy: (
                           policy_name: ::String,
                           policy_document: ::String
                         ) -> UserPolicy
                       | (?Hash[Symbol, untyped]) -> UserPolicy

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/IAM/User.html#delete-instance_method
      def delete: (
                  ) -> ::Aws::EmptyStructure
                | (?Hash[Symbol, untyped]) -> ::Aws::EmptyStructure

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/IAM/User.html#detach_policy-instance_method
      def detach_policy: (
                           policy_arn: ::String
                         ) -> ::Aws::EmptyStructure
                       | (?Hash[Symbol, untyped]) -> ::Aws::EmptyStructure

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/IAM/User.html#enable_mfa-instance_method
      def enable_mfa: (
                        serial_number: ::String,
                        authentication_code_1: ::String,
                        authentication_code_2: ::String
                      ) -> MfaDevice
                    | (?Hash[Symbol, untyped]) -> MfaDevice

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/IAM/User.html#remove_group-instance_method
      def remove_group: (
                          group_name: ::String
                        ) -> ::Aws::EmptyStructure
                      | (?Hash[Symbol, untyped]) -> ::Aws::EmptyStructure

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/IAM/User.html#update-instance_method
      def update: (
                    ?new_path: ::String,
                    ?new_user_name: ::String
                  ) -> User
                | (?Hash[Symbol, untyped]) -> User

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/IAM/User.html#access_key-instance_method
      def access_key: (String id) -> AccessKey

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/IAM/User.html#access_keys-instance_method
      def access_keys: (
                       ) -> AccessKey::Collection
                     | (?Hash[Symbol, untyped]) -> AccessKey::Collection

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/IAM/User.html#attached_policies-instance_method
      def attached_policies: (
                               ?path_prefix: ::String
                             ) -> Policy::Collection
                           | (?Hash[Symbol, untyped]) -> Policy::Collection

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/IAM/User.html#groups-instance_method
      def groups: (
                  ) -> Group::Collection
                | (?Hash[Symbol, untyped]) -> Group::Collection

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/IAM/User.html#login_profile-instance_method
      def login_profile: () -> LoginProfile

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/IAM/User.html#mfa_device-instance_method
      def mfa_device: (String serial_number) -> MfaDevice

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/IAM/User.html#mfa_devices-instance_method
      def mfa_devices: (
                       ) -> MfaDevice::Collection
                     | (?Hash[Symbol, untyped]) -> MfaDevice::Collection

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/IAM/User.html#policies-instance_method
      def policies: (
                    ) -> UserPolicy::Collection
                  | (?Hash[Symbol, untyped]) -> UserPolicy::Collection

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/IAM/User.html#policy-instance_method
      def policy: (String name) -> UserPolicy

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/IAM/User.html#signing_certificate-instance_method
      def signing_certificate: (String id) -> SigningCertificate

      # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/IAM/User.html#signing_certificates-instance_method
      def signing_certificates: (
                                ) -> SigningCertificate::Collection
                              | (?Hash[Symbol, untyped]) -> SigningCertificate::Collection

      class Collection < ::Aws::Resources::Collection[User]
      end
    end
  end
end