The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Proc::Safetynet::Program;
use strict;
use warnings;
use Carp;

use Moose;
use Moose::Util::TypeConstraints;

subtype 'ProgramName'
    => as 'Str'
    => where { ($_ =~ /^[\w\-\_]+$/) ? 1 : 0 };


has 'name' => (
    is          => 'rw',
    isa         => 'ProgramName',
    required    => 1,
);

has 'command' => (
    is          => 'rw',
    isa         => 'Str',
    required    => 1,
);

has 'autostart' => (
    is          => 'rw',
    isa         => 'Bool',
    required    => 1,
    default     => 0,
);

has 'autorestart' => (
    is          => 'rw',
    isa         => 'Bool',
    required    => 1,
    default     => 0,
);

has 'autorestart_wait' => (
    is          => 'rw',
    isa         => 'Int',
    required    => 1,
    default     => 10,
);

has 'priority' => (
    is          => 'rw',
    isa         => 'Int',
    required    => 0,
);

has 'eventlistener' => (
    is          => 'rw',
    isa         => 'Bool',
    required    => 0,
);

sub TO_JSON {
    my $self = shift;
    my $o = { };
    foreach my $k (keys %$self) {
        $o->{$k} = $self->{$k};
    }
    return $o;
}

no Moose;

1;

__END__