=begin pod

=head1 NAME

AWS::Credentials::Provider - the interface credentials providers follow

=head1 SYNOPSIS

    use AWS::Credentials;

    class MyCredentialsProvider does AWS::Credentials::Provider {
        method load(AWS::Session $session) returns AWS::Credentials {
            ... # do you thing
        }
    }

    my $resolver = AWS::Credentials::Provider::Resolver.DEFAULT;
    $resolver.providers.push: MyCredentialsProvider.new;

    my $creds = load-credentials(:$resolver);

=head1 DESCRIPTION

Any credentials providers must implement this interface.

=head1 REQUIRED METHODS

=head2 method load

    method load(AWS::Session $session) returns AWS::Credentials

Implementations of this method can expect a defined session variable to be passed into it. The method is expected to use that information or any other context at its disposal to generate credentials.

Implementations of this method should not throw an exception.

If no credentials can be found using the mechanism the provider defines, the method should return C<Nil>.

The normal credentials resolution procedure is to call each provider's C<load>
method in sequence and return the first defined L<AWS::Credentials> object
returned.

=end pod
