The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Parse::Crontab::Entry;
use strict;
use warnings;
use utf8;

use Mouse;

has line => (
    is       => 'ro',
    isa      => 'Str',
    required => 1,
);

has line_number => (
    is       => 'ro',
    isa      => 'Int',
    required => 1,
);

has is_error => (
    is      => 'rw',
    isa     => 'Bool',
    default => undef,
);

has errors => (
    is  => 'rw',
    isa => 'ArrayRef[Str]',
    default => sub {[]},
    auto_deref => 1,
);

has warnings => (
    is  => 'rw',
    isa => 'ArrayRef[Str]',
    default => sub {[]},
    auto_deref => 1,
);

no Mouse;

sub set_error {
    my ($self, $error_msg) = @_;

    push @{$self->errors}, $error_msg;
    $self->is_error(1);
}

sub error_message {
    my $self = shift;

    sprintf 'line: %d: %s | %s', $self->line_number, $self->line, join(' ', $self->errors);
}

sub set_warning {
    my ($self, $warn_msg) = @_;

    push @{$self->warnings}, $warn_msg;
}

sub warning_message {
    my $self = shift;

    sprintf 'line: %d: %s | %s', $self->line_number, $self->line, join(' ', $self->warnings);
}

sub has_warnings {
    my $self = shift;

    scalar @{$self->warnings} ? 1 : ();
}

__PACKAGE__->meta->make_immutable;