The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Retrier;
use strict;
use utf8;
use warnings qw(all);

use Moo;
use MooX::Types::MooseLike::Base qw(InstanceOf Int Num Str);

extends 'AnyEvent::Net::Curl::Queued::Easy';

has attr1 => (is => 'ro', isa => Num, required => 1);
has attr2 => (is => 'ro', isa => Int, required => 1);
has attr3 => (is => 'rw', isa => InstanceOf['URI']);
has attr4 => (is => 'rw', isa => Str, default => sub { 'A' });

around clone => sub {
    my $orig = shift;
    my $self = shift;
    my $param = shift;

    $param->{$_} = $self->$_
        for qw(
            attr1
            attr2
            attr3
        );

    return $self->$orig($param);
};

around has_error => sub {
    return 1;
};

1;