The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package OpenID::Lite::Message::Decoder::Hash;

use Any::Moose;
use OpenID::Lite::Message;

sub decode {
    my ( $self, $hash ) = @_;
    my $message = OpenID::Lite::Message->new;
    for my $key (%$hash) {
        if ( $key =~ /^openid\.(.+)$/ ) {
            $message->set( $1, $hash->{$key} );
        }
        elsif ( $key =~ /^openid\.(.+)\.(.+)$/ ) {
            my $ext_name = $1;
            my $ext_key  = $2;
            if ( $ext_name eq 'ns' ) {
                $message->register_extension_namespace( $ext_key,
                    $hash->{$key} );
            }
            else {
                $message->set_extension( $ext_name, $ext_key, $hash->{$key} );
            }
        }
        else {
            $message->set_extra( $key, $hash->{$key} );
        }
    }
    return $message;
}

no Any::Moose;
__PACKAGE__->meta->make_immutable;
1;