use strict;
use warnings;
package MetaCPAN::Client::Distribution;
# ABSTRACT: A Distribution data object
$MetaCPAN::Client::Distribution::VERSION = '2.000000';
use Moo;

with 'MetaCPAN::Client::Role::Entity';

my %known_fields = (
    scalar   => [qw< name >],
    arrayref => [],
    hashref  => [qw< bugs river >]
);

my %__known_fields_ex = (
    map { my $k = $_; $k => +{ map { $_ => 1 } @{ $known_fields{$k} } } }
    keys %known_fields
);

my @known_fields = map { @{ $known_fields{$_} } } keys %known_fields;

foreach my $field ( @known_fields ) {
    has $field => (
        is      => 'ro',
        lazy    => 1,
        default => sub {
            my $self = shift;
            return (
                exists $self->data->{$field}                ? $self->data->{$field} :
                exists $__known_fields_ex{hashref}{$field}  ? {} :
                exists $__known_fields_ex{arrayref}{$field} ? [] :
                exists $__known_fields_ex{scalar}{$field}   ? '' :
                undef
            );
        },
    );
}

sub _known_fields { return \%known_fields }

1;

__END__

=pod

=encoding UTF-8

=head1 NAME

MetaCPAN::Client::Distribution - A Distribution data object

=head1 VERSION

version 2.000000

=head1 SYNOPSIS

my $dist = $mcpan->distribution('MetaCPAN-Client');

=head1 DESCRIPTION

A MetaCPAN distribution entity object.

=head1 ATTRIBUTES

=head2 name

=head2 bugs

Hash-Ref.

=head2 river

Hash-Ref.

=head1 AUTHORS

=over 4

=item *

Sawyer X <xsawyerx@cpan.org>

=item *

Mickey Nasriachi <mickey@cpan.org>

=back

=head1 COPYRIGHT AND LICENSE

This software is copyright (c) 2016 by Sawyer X.

This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.

=cut
