view release on metacpan or search on metacpan
lib/BoutrosLab/TSVStream/Format/AnnovarInput/Human/Dyn.pm view on Meta::CPAN
=head1 NAME
BoutrosLab::TSVStream::Format::AnnovarInput::Human::Dyn
=cut
package BoutrosLab::TSVStream::Format::AnnovarInput::Human::Dyn;
use Moose;
use namespace::autoclean;
with qw(
BoutrosLab::TSVStream::Format::AnnovarInput::Role
BoutrosLab::TSVStream::Format::AnnovarInput::Role::Human
BoutrosLab::TSVStream::IO::Role::Dyn
);
__PACKAGE__->meta->make_immutable;
=over
lib/BoutrosLab/TSVStream/Format/AnnovarInput/Human/Fixed.pm view on Meta::CPAN
=head1 NAME
BoutrosLab::TSVStream::Format::AnnovarInput::Human::Fixed
=cut
package BoutrosLab::TSVStream::Format::AnnovarInput::Human::Fixed;
use Moose;
use namespace::autoclean;
with qw(
BoutrosLab::TSVStream::Format::AnnovarInput::Role
BoutrosLab::TSVStream::Format::AnnovarInput::Role::Human
BoutrosLab::TSVStream::IO::Role::Fixed
);
__PACKAGE__->meta->make_immutable;
=head1 SEE ALSO
lib/BoutrosLab/TSVStream/Format/AnnovarInput/HumanNoChr/Dyn.pm view on Meta::CPAN
=head1 NAME
BoutrosLab::TSVStream::Format::AnnovarInput::HumanNoChr::Dyn
=cut
package BoutrosLab::TSVStream::Format::AnnovarInput::HumanNoChr::Dyn;
use Moose;
use namespace::autoclean;
with qw(
BoutrosLab::TSVStream::Format::AnnovarInput::Role
BoutrosLab::TSVStream::Format::AnnovarInput::Role::HumanNoChr
BoutrosLab::TSVStream::IO::Role::Dyn
);
__PACKAGE__->meta->make_immutable;
=head1 SEE ALSO
lib/BoutrosLab/TSVStream/Format/AnnovarInput/HumanNoChr/Fixed.pm view on Meta::CPAN
=head1 NAME
BoutrosLab::TSVStream::Format::AnnovarInput::HumanNoChr::Fixed
=cut
package BoutrosLab::TSVStream::Format::AnnovarInput::HumanNoChr::Fixed;
use Moose;
use namespace::autoclean;
with qw(
BoutrosLab::TSVStream::Format::AnnovarInput::Role
BoutrosLab::TSVStream::Format::AnnovarInput::Role::HumanNoChr
BoutrosLab::TSVStream::IO::Role::Fixed
);
__PACKAGE__->meta->make_immutable;
=head1 SEE ALSO
lib/BoutrosLab/TSVStream/Format/AnnovarInput/HumanTag/Dyn.pm view on Meta::CPAN
=head1 NAME
BoutrosLab::TSVStream::Format::AnnovarInput::HumanTag::Dyn
=cut
package BoutrosLab::TSVStream::Format::AnnovarInput::HumanTag::Dyn;
use Moose;
use namespace::autoclean;
with qw(
BoutrosLab::TSVStream::Format::AnnovarInput::Role
BoutrosLab::TSVStream::Format::AnnovarInput::Role::HumanTag
BoutrosLab::TSVStream::IO::Role::Dyn
);
__PACKAGE__->meta->make_immutable;
=over
lib/BoutrosLab/TSVStream/Format/AnnovarInput/HumanTag/Fixed.pm view on Meta::CPAN
=head1 NAME
BoutrosLab::TSVStream::Format::AnnovarInput::HumanTag::Fixed
=cut
package BoutrosLab::TSVStream::Format::AnnovarInput::HumanTag::Fixed;
use Moose;
use namespace::autoclean;
with qw(
BoutrosLab::TSVStream::Format::AnnovarInput::Role
BoutrosLab::TSVStream::Format::AnnovarInput::Role::HumanTag
BoutrosLab::TSVStream::IO::Role::Fixed
);
__PACKAGE__->meta->make_immutable;
=head1 SEE ALSO
lib/BoutrosLab/TSVStream/Format/AnnovarInput/HumanTagNoChr/Dyn.pm view on Meta::CPAN
=head1 NAME
BoutrosLab::TSVStream::Format::AnnovarInput::HumanTagNoChr::Dyn
=cut
package BoutrosLab::TSVStream::Format::AnnovarInput::HumanTagNoChr::Dyn;
use Moose;
use namespace::autoclean;
with qw(
BoutrosLab::TSVStream::Format::AnnovarInput::Role
BoutrosLab::TSVStream::Format::AnnovarInput::Role::HumanTagNoChr
BoutrosLab::TSVStream::IO::Role::Dyn
);
__PACKAGE__->meta->make_immutable;
=head1 SEE ALSO
lib/BoutrosLab/TSVStream/Format/AnnovarInput/HumanTagNoChr/Fixed.pm view on Meta::CPAN
=head1 NAME
BoutrosLab::TSVStream::Format::AnnovarInput::HumanTagNoChr::Fixed
=cut
package BoutrosLab::TSVStream::Format::AnnovarInput::HumanTagNoChr::Fixed;
use Moose;
use namespace::autoclean;
with qw(
BoutrosLab::TSVStream::Format::AnnovarInput::Role
BoutrosLab::TSVStream::Format::AnnovarInput::Role::HumanTagNoChr
BoutrosLab::TSVStream::IO::Role::Fixed
);
__PACKAGE__->meta->make_immutable;
=head1 SEE ALSO
lib/BoutrosLab/TSVStream/Format/AnnovarInput/Role.pm view on Meta::CPAN
=cut
package BoutrosLab::TSVStream::Format::AnnovarInput::Role;
use Moose::Role;
use BoutrosLab::TSVStream::Format::AnnovarInput::Types qw( AI_Ref );
use BoutrosLab::TSVStream::Format::VCF::Types qw( VCF_Alt );
use MooseX::Types::Moose qw( ArrayRef Int );
use MooseX::ClassAttribute;
use namespace::autoclean;
=head1 Class Attributes
=head2 _fields
The B<_fields> attribute is required by the IO roles to determine
which fields are to be read or written. In this case, the fields
are C<chr>, C<start>, C<end>, C<ref>, and C<alt>, which are described
as attributes below.
lib/BoutrosLab/TSVStream/Format/AnnovarInput/Role.pm view on Meta::CPAN
Like the two subroles above, the addition or absense of 'NoChr'
in the role name controls whether the value is coerced to have,
or not have, a leading 'chr' string. (See the previous section.)
=cut
package BoutrosLab::TSVStream::Format::AnnovarInput::Role::Human;
use Moose::Role;
use BoutrosLab::TSVStream::Format::AnnovarInput::Types qw(AI_ChrHumanWithChr);
use namespace::autoclean;
has 'chr' => (
is => 'ro',
isa => AI_ChrHumanWithChr,
coerce => 1,
required => 1
);
package BoutrosLab::TSVStream::Format::AnnovarInput::Role::HumanNoChr;
use Moose::Role;
use BoutrosLab::TSVStream::Format::AnnovarInput::Types qw(AI_ChrHumanNoChr);
use namespace::autoclean;
has 'chr' => (
is => 'ro',
isa => AI_ChrHumanNoChr,
coerce => 1,
required => 1
);
package BoutrosLab::TSVStream::Format::AnnovarInput::Role::HumanTag;
use Moose::Role;
use BoutrosLab::TSVStream::Format::AnnovarInput::Types qw(AI_ChrHumanTagWithChr);
use namespace::autoclean;
has 'chr' => (
is => 'ro',
isa => AI_ChrHumanTagWithChr,
coerce => 1,
required => 1
);
package BoutrosLab::TSVStream::Format::AnnovarInput::Role::HumanTagNoChr;
use Moose::Role;
use BoutrosLab::TSVStream::Format::AnnovarInput::Types qw(AI_ChrHumanTagNoChr);
use namespace::autoclean;
has 'chr' => (
is => 'ro',
isa => AI_ChrHumanTagNoChr,
coerce => 1,
required => 1
);
=head1 SEE ALSO
lib/BoutrosLab/TSVStream/Format/None/Dyn.pm view on Meta::CPAN
package BoutrosLab::TSVStream::Format::None::Dyn;
# safe Perl
use warnings;
use strict;
use Carp;
use BoutrosLab::TSVStream::IO::Role::Dyn;
use Moose;
use namespace::autoclean;
use MooseX::ClassAttribute;
class_has '_fields' => (
is => 'ro',
isa => 'ArrayRef',
default => sub { [ ] }
);
with 'BoutrosLab::TSVStream::IO::Role::Dyn';
lib/BoutrosLab/TSVStream/Format/VCF/AsAnnovarInputChr/Dyn.pm view on Meta::CPAN
=head1 NAME
BoutrosLab::TSVStream::Format::VCF::AsAnnovarInputChr::Dyn
=cut
package BoutrosLab::TSVStream::Format::VCF::AsAnnovarInputChr::Dyn;
use Moose;
use namespace::autoclean;
use BoutrosLab::TSVStream::Format::VCF::Role;
with qw(
BoutrosLab::TSVStream::Format::VCF::Role::AsAnnovarInputChr
BoutrosLab::TSVStream::IO::Role::Dyn
);
__PACKAGE__->meta->make_immutable;
lib/BoutrosLab/TSVStream/Format/VCF/AsAnnovarInputChr/Fixed.pm view on Meta::CPAN
=head1 NAME
BoutrosLab::TSVStream::Format::VCF::AsAnnovarInputChr::Fixed
=cut
package BoutrosLab::TSVStream::Format::VCF::AsAnnovarInputChr::Fixed;
use Moose;
use namespace::autoclean;
use BoutrosLab::TSVStream::Format::VCF::Role;
with qw(
BoutrosLab::TSVStream::Format::VCF::Role::AsAnnovarInputChr
BoutrosLab::TSVStream::IO::Role::Fixed
);
__PACKAGE__->meta->make_immutable;
lib/BoutrosLab/TSVStream/Format/VCF/AsAnnovarInputNoChr/Dyn.pm view on Meta::CPAN
=head1 NAME
BoutrosLab::TSVStream::Format::VCF::AsAnnovarInputNoChr::Dyn
=cut
package BoutrosLab::TSVStream::Format::VCF::AsAnnovarInputNoChr::Dyn;
use Moose;
use namespace::autoclean;
use BoutrosLab::TSVStream::Format::VCF::Role;
with qw(
BoutrosLab::TSVStream::Format::VCF::Role::AsAnnovarInputNoChr
BoutrosLab::TSVStream::IO::Role::Dyn
);
__PACKAGE__->meta->make_immutable;
lib/BoutrosLab/TSVStream/Format/VCF/AsAnnovarInputNoChr/Fixed.pm view on Meta::CPAN
=head1 NAME
BoutrosLab::TSVStream::Format::VCF::AsAnnovarInputNoChr::Fixed
=cut
package BoutrosLab::TSVStream::Format::VCF::AsAnnovarInputNoChr::Fixed;
use Moose;
use namespace::autoclean;
use BoutrosLab::TSVStream::Format::VCF::Role;
with qw(
BoutrosLab::TSVStream::Format::VCF::Role::AsAnnovarInputNoChr
BoutrosLab::TSVStream::IO::Role::Fixed
);
# __PACKAGE__->meta->make_immutable;
lib/BoutrosLab/TSVStream/Format/VCF/Dyn.pm view on Meta::CPAN
=head1 NAME
BoutrosLab::TSVStream::Format::VCF::Dyn
=cut
package BoutrosLab::TSVStream::Format::VCF::Dyn;
use Moose;
use namespace::autoclean;
use BoutrosLab::TSVStream::Format::VCF::Role;
with qw(
BoutrosLab::TSVStream::Format::VCF::Role
BoutrosLab::TSVStream::IO::Role::Dyn
);
__PACKAGE__->meta->make_immutable;
lib/BoutrosLab/TSVStream/Format/VCF/Fixed.pm view on Meta::CPAN
=head1 NAME
BoutrosLab::TSVStream::Format::VCF::Fixed
=cut
package BoutrosLab::TSVStream::Format::VCF::Fixed;
use Moose;
use namespace::autoclean;
use BoutrosLab::TSVStream::Format::VCF::Role;
with qw(
BoutrosLab::TSVStream::Format::VCF::Role
BoutrosLab::TSVStream::IO::Role::Fixed
);
__PACKAGE__->meta->make_immutable;
lib/BoutrosLab/TSVStream/Format/VCF/FullChr/Dyn.pm view on Meta::CPAN
=head1 NAME
BoutrosLab::TSVStream::Format::VCF::FullChr::Dyn
=cut
package BoutrosLab::TSVStream::Format::VCF::FullChr::Dyn;
use Moose;
use namespace::autoclean;
use BoutrosLab::TSVStream::Format::VCF::Role;
with qw(
BoutrosLab::TSVStream::Format::VCF::Role::FullChr
BoutrosLab::TSVStream::IO::Role::Dyn
);
__PACKAGE__->meta->make_immutable;
lib/BoutrosLab/TSVStream/Format/VCF/FullChr/Fixed.pm view on Meta::CPAN
=head1 NAME
BoutrosLab::TSVStream::Format::VCF::FullChr::Fixed
=cut
package BoutrosLab::TSVStream::Format::VCF::FullChr::Fixed;
use Moose;
use namespace::autoclean;
use BoutrosLab::TSVStream::Format::VCF::Role;
with qw(
BoutrosLab::TSVStream::Format::VCF::Role::FullChr
BoutrosLab::TSVStream::IO::Role::Fixed
);
__PACKAGE__->meta->make_immutable;
lib/BoutrosLab/TSVStream/Format/VCF/FullNoChr/Dyn.pm view on Meta::CPAN
=head1 NAME
BoutrosLab::TSVStream::Format::VCF::FullNoChr::Dyn
=cut
package BoutrosLab::TSVStream::Format::VCF::FullNoChr::Dyn;
use Moose;
use namespace::autoclean;
use BoutrosLab::TSVStream::Format::VCF::Role;
with qw(
BoutrosLab::TSVStream::Format::VCF::Role::FullNoChr
BoutrosLab::TSVStream::IO::Role::Dyn
);
__PACKAGE__->meta->make_immutable;
lib/BoutrosLab/TSVStream/Format/VCF/FullNoChr/Fixed.pm view on Meta::CPAN
=head1 NAME
BoutrosLab::TSVStream::Format::VCF::FullNoChr::Fixed
=cut
package BoutrosLab::TSVStream::Format::VCF::FullNoChr::Fixed;
use Moose;
use namespace::autoclean;
use BoutrosLab::TSVStream::Format::VCF::Role;
with qw(
BoutrosLab::TSVStream::Format::VCF::Role::FullNoChr
BoutrosLab::TSVStream::IO::Role::Fixed
);
# __PACKAGE__->meta->make_immutable;
lib/BoutrosLab/TSVStream/Format/VCF/Role.pm view on Meta::CPAN
See BoutrosLab::TSVStream::Format::Human::Fixed for an example.
=cut
package BoutrosLab::TSVStream::Format::VCF::Role::Base;
use Moose::Role;
use BoutrosLab::TSVStream::Format::VCF::Types qw( VCF_Chrom VCF_Ref Str_No_Whitespace VCF_KV_Str );
use MooseX::Types::Moose qw( ArrayRef HashRef Int );
use MooseX::ClassAttribute;
use namespace::autoclean;
=head1 Class Attributes
=head2 _fields
The B<_fields> attribute is required by the IO roles to determine
which fields are to be read or written. In this case, the fields
are C<chrom>, C<start>, C<end>, C<ref>, and C<alt>, which are described
as attributes below.
lib/BoutrosLab/TSVStream/Format/VCF/Role.pm view on Meta::CPAN
=head3 chr
The B<chr> attribute is the B<chrom> attribute with a leading 'chr'
string either forced or removed.
=cut
package BoutrosLab::TSVStream::Format::VCF::Role::Full;
use Moose::Role;
use namespace::autoclean;
use BoutrosLab::TSVStream::Format::VCF::Types qw( VCF_Ref_Full VCF_Alt_Full );
has 'ref' => ( is => 'rw', isa => VCF_Ref_Full );
has 'alt' => ( is => 'rw', isa => VCF_Alt_Full );
package BoutrosLab::TSVStream::Format::VCF::Role::RecSNV;
use Moose::Role;
use namespace::autoclean;
use BoutrosLab::TSVStream::Format::VCF::Types qw( VCF_Ref VCF_Alt );
has 'ref' => ( is => 'rw', isa => VCF_Ref );
has 'alt' => ( is => 'rw', isa => VCF_Alt );
package BoutrosLab::TSVStream::Format::VCF::Role::WithChr;
use Carp qw(croak);
use Moose::Role;
use namespace::autoclean;
use BoutrosLab::TSVStream::Format::AnnovarInput::Types qw( AI_ChrHumanTagWithChr );
sub chr {
my $self = shift;
my $chrom = my $chr = $self->chrom;
if ($chr =~ /^chr/i) {
$chr =~ s/^chr/chr/i;
}
else {
$chr = "chr$chr";
lib/BoutrosLab/TSVStream/Format/VCF/Role.pm view on Meta::CPAN
croak( "chrom ($chrom) failed to convert to AnnovarInput chr" )
unless is_AI_ChrHumanTagWithChr($chr);
return to_AI_ChrHumanTagWithChr($chr);
}
package BoutrosLab::TSVStream::Format::VCF::Role::WithNoChr;
use Carp qw(croak);
use Moose::Role;
use namespace::autoclean;
use BoutrosLab::TSVStream::Format::AnnovarInput::Types qw( AI_ChrHumanTagNoChr );
sub chr {
my $self = shift;
my $chrom = my $chr = $self->chrom;
$chr =~ s/^chr//i;
croak( "chrom ($chrom) failed to convert to AnnovarInput chr" )
unless is_AI_ChrHumanTagNoChr($chr);
return to_AI_ChrHumanTagNoChr($chr);
}
package BoutrosLab::TSVStream::Format::VCF::Role::FullChr;
use Moose::Role;
use namespace::autoclean;
with 'BoutrosLab::TSVStream::Format::VCF::Role::Base',
'BoutrosLab::TSVStream::Format::VCF::Role::Full',
'BoutrosLab::TSVStream::Format::VCF::Role::WithChr';
package BoutrosLab::TSVStream::Format::VCF::Role::FullNoChr;
use Moose::Role;
use namespace::autoclean;
with 'BoutrosLab::TSVStream::Format::VCF::Role::Base',
'BoutrosLab::TSVStream::Format::VCF::Role::Full',
'BoutrosLab::TSVStream::Format::VCF::Role::WithNoChr';
package BoutrosLab::TSVStream::Format::VCF::Role;
use Moose::Role;
use namespace::autoclean;
with 'BoutrosLab::TSVStream::Format::VCF::Role::Base',
'BoutrosLab::TSVStream::Format::VCF::Role::RecSNV';
package BoutrosLab::TSVStream::Format::VCF::Role::AsAnnovarInput;
use Moose::Role;
use namespace::autoclean;
with 'BoutrosLab::TSVStream::Format::VCF::Role';
sub start {
my $self = shift;
return $self->pos;
}
sub end {
my $self = shift;
return $self->pos + length($self->ref) - 1;
}
package BoutrosLab::TSVStream::Format::VCF::Role::AsAnnovarInputChr;
use Moose::Role;
use namespace::autoclean;
with 'BoutrosLab::TSVStream::Format::VCF::Role::AsAnnovarInput',
'BoutrosLab::TSVStream::Format::VCF::Role::WithChr';
package BoutrosLab::TSVStream::Format::VCF::Role::AsAnnovarInputNoChr;
use Moose::Role;
use namespace::autoclean;
with 'BoutrosLab::TSVStream::Format::VCF::Role::AsAnnovarInput',
'BoutrosLab::TSVStream::Format::VCF::Role::WithNoChr';
=head1 SEE ALSO
=over
=item BoutrosLab::TSVStream::Format
lib/BoutrosLab/TSVStream/IO/Reader/Dyn.pm view on Meta::CPAN
use strict;
use Carp;
=head1 NAME
BoutrosLab::TSVStream:IO::Reader::Dyn
=cut
use Moose;
use namespace::autoclean;
use BoutrosLab::TSVStream::IO::Role::Base::Dyn;
use BoutrosLab::TSVStream::IO::Role::Reader::Dyn;
with 'BoutrosLab::TSVStream::IO::Role::Base::Dyn',
'BoutrosLab::TSVStream::IO::Role::Reader::Dyn';
__PACKAGE__->meta->make_immutable;
=head1 SYNOPSIS
lib/BoutrosLab/TSVStream/IO/Reader/Fixed.pm view on Meta::CPAN
use strict;
use Carp;
=head1 NAME
BoutrosLab::TSVStream:IO::Reader::Fixed
=cut
use Moose;
use namespace::autoclean;
use BoutrosLab::TSVStream::IO::Role::Base::Fixed;
use BoutrosLab::TSVStream::IO::Role::Reader::Fixed;
with 'BoutrosLab::TSVStream::IO::Role::Base::Fixed',
'BoutrosLab::TSVStream::IO::Role::Reader::Fixed';
__PACKAGE__->meta->make_immutable;
=head1 SYNOPSIS
lib/BoutrosLab/TSVStream/IO/Role/Base/Dyn.pm view on Meta::CPAN
package BoutrosLab::TSVStream::IO::Role::Base::Dyn;
# safe Perl
use warnings;
use strict;
use Carp;
use Moose::Role;
use BoutrosLab::TSVStream::IO::Role::Base::Fixed;
use namespace::autoclean;
with 'BoutrosLab::TSVStream::IO::Role::Base::Fixed';
# Base role for all Dynamic reader/writer variants
has dyn_fields => (
is => 'ro',
isa => 'ArrayRef[Str]',
predicate => '_has_dyn_fields',
writer => '_set_dyn_fields',
lib/BoutrosLab/TSVStream/IO/Role/Base/Fixed.pm view on Meta::CPAN
package BoutrosLab::TSVStream::IO::Role::Base::Fixed;
# safe Perl
use warnings;
use strict;
use Carp;
use feature 'say';
use Moose::Role;
use namespace::autoclean;
use Try::Tiny;
# Base role for all reader/writer variants
#
# The BUILDARGS wrapper checks wheter a handle was proveded
# and, if not, opens the file provided and sets the handle
# to that newly opened fd.
#
# The class that consumes this role can add two extra entries
# to the arg list:
lib/BoutrosLab/TSVStream/IO/Role/Dyn.pm view on Meta::CPAN
package BoutrosLab::TSVStream::IO::Role::Dyn;
# safe Perl
use warnings;
use strict;
use Carp;
use Moose::Role;
use namespace::autoclean;
use BoutrosLab::TSVStream::IO::Reader::Dyn;
use BoutrosLab::TSVStream::IO::Writer::Dyn;
with 'BoutrosLab::TSVStream::IO::Role::Fixed';
=head1 NAME
BoutrosLab::TSVStreamDyn::IO::Role::Dyn
lib/BoutrosLab/TSVStream/IO/Role/Fixed.pm view on Meta::CPAN
package BoutrosLab::TSVStream::IO::Role::Fixed;
# safe Perl
use warnings;
use strict;
use Carp;
use Moose::Role;
use namespace::autoclean;
use Moose::Util qw(find_meta);
use BoutrosLab::TSVStream::IO::Reader::Fixed;
use BoutrosLab::TSVStream::IO::Writer::Fixed;
=head1 NAME
BoutrosLab::TSVStream::IO::Role::Fixed
lib/BoutrosLab/TSVStream/IO/Role/Reader/Dyn.pm view on Meta::CPAN
use strict;
use Carp;
=head1 NAME
BoutrosLab::TSVStream:IO::Role::Reader::Dyn
=cut
use Moose::Role;
use namespace::autoclean;
with 'BoutrosLab::TSVStream::IO::Role::Reader::Fixed';
sub _read_no_header {
my $self = shift;
my $none = $self->header eq 'none';
( $none, ($none && $self->_has_dyn_fields) );
}
sub _fill_dyn_fields {
lib/BoutrosLab/TSVStream/IO/Role/Reader/Fixed.pm view on Meta::CPAN
use Carp;
=head1 NAME
BoutrosLab::TSVStream::IO::Role::Reader::Fixed
=cut
use Moose::Role;
use Moose::Util::TypeConstraints;
use namespace::autoclean;
use List::MoreUtils qw(all);
enum 'ReadHeaderType', [qw(auto none check)];
has header => (
is => 'ro',
lazy => 1,
isa => 'ReadHeaderType',
default => 'auto'
);
lib/BoutrosLab/TSVStream/IO/Role/Writer/Dyn.pm view on Meta::CPAN
use BoutrosLab::TSVStream::IO::Role::Writer::Fixed;
=head1 NAME
BoutrosLab::TSVStream:Writer
=cut
use Moose::Role;
use Moose::Util::TypeConstraints;
use namespace::autoclean;
with 'BoutrosLab::TSVStream::IO::Role::Writer::Fixed' => { -excludes => '_list_headers' };
sub _list_headers {
my $self = shift;
return ( [ @{ $self->fields }, @{ $self->dyn_fields } ] );
}
=head1 SYNOPSIS