package Git::PurePerl::Object::Tree; use Moose; use MooseX::StrictConstructor; use Moose::Util::TypeConstraints; use namespace::autoclean; extends 'Git::PurePerl::Object'; has 'kind' => ( is => 'ro', isa => 'ObjectKind', required => 1, default => 'tree' ); has 'directory_entries' => ( is => 'rw', isa => 'ArrayRef[Git::PurePerl::DirectoryEntry]', required => 0, auto_deref => 1, ); sub BUILD { my $self = shift; my $content = $self->content; return unless $content; my @directory_entries; while ($content) { my $space_index = index( $content, ' ' ); my $mode = substr( $content, 0, $space_index ); $content = substr( $content, $space_index + 1 ); my $null_index = index( $content, "\0" ); my $filename = substr( $content, 0, $null_index ); $content = substr( $content, $null_index + 1 ); my $sha1 = unpack( 'H*', substr( $content, 0, 20 ) ); $content = substr( $content, 20 ); push @directory_entries, Git::PurePerl::DirectoryEntry->new( mode => $mode, filename => $filename, sha1 => $sha1, git => $self->git, ); } $self->directory_entries( \@directory_entries ); } __PACKAGE__->meta->make_immutable;