package OAuth::Lite2::Client::Error;

use strict;
use warnings;

use overload
    q{""}    => sub { shift->message },
    fallback => 1;

sub default_message { "error" }

sub new {
    my ($class, %args) = @_;
    bless {
        message => $args{message} || $class->default_message,
    }, $class;
}

sub throw {
    my ($class, %args) = @_;
    die $class->new(%args);
}

sub message {
    my $self = shift;
    return $self->{message};
}

package OAuth::Lite2::Client::Error::InvalidResponse;
our @ISA = qw(OAuth::Lite2::Client::Error);
sub default_message { "invalid response" }

package OAuth::Lite2::Client::Error::InsecureRequest;
our @ISA = qw(OAuth::Lite2::Client::Error);
sub default_message { "insecure request" }

package OAuth::Lite2::Client::Error::InsecureResponse;
our @ISA = qw(OAuth::Lite2::Client::Error);
sub default_message { "insecure response" }

package OAuth::Lite2::Client::Error;

=head1 NAME

OAuth::Lite2::Client::Error - OAuth 2.0 client error

=head1 SYNOPSIS

    OAuth::Lite2::Client::Error::InvalidResponse->throw(
        message => q{invalid format},
    );

=head1 DESCRIPTION

OAuth 2.0 client error

=head1 ERRORS

=over 4

=item OAuth::Lite2::Client::Error::InvalidResponse

=item OAuth::Lite2::Client::Error::InsecureRequest

=item OAuth::Lite2::Client::Error::InsecureResponse

=back

=head1 AUTHOR

Lyo Kato, E<lt>lyo.kato@gmail.comE<gt>

=head1 COPYRIGHT AND LICENSE

Copyright (C) 2010 by Lyo Kato

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself, either Perl version 5.8.8 or,
at your option, any later version of Perl 5 you may have available.

=cut

1;