1package Net::RabbitFoot::Cmd::Command::declare_queue;
2
3use Moose;
4extends qw(MooseX::App::Cmd::Command);
5with qw(Net::RabbitFoot::Cmd::Role::Config Net::RabbitFoot::Cmd::Role::Command);
6
7has queue => (
8    isa           => 'Str',
9    is            => 'rw',
10    default       => '',
11    metaclass     => 'MooseX::Getopt::Meta::Attribute',
12    cmd_aliases   => 'q',
13    documentation => 'queue name',
14);
15
16has passive => (
17    isa           => 'Bool',
18    is            => 'rw',
19    default       => 0,
20    metaclass     => 'MooseX::Getopt::Meta::Attribute',
21#    cmd_aliases   => 'p',
22    documentation => 'do not create queue',
23);
24
25has durable => (
26    isa           => 'Bool',
27    is            => 'rw',
28    default       => 0,
29    metaclass     => 'MooseX::Getopt::Meta::Attribute',
30    cmd_aliases   => 'd',
31    documentation => 'request a durable queue',
32);
33
34has exclusive => (
35    isa           => 'Bool',
36    is            => 'rw',
37    default       => 0,
38    metaclass     => 'MooseX::Getopt::Meta::Attribute',
39    cmd_aliases   => 'e',
40    documentation => 'request an exclusive queue',
41);
42
43has auto_delete => (
44    isa           => 'Bool',
45    is            => 'rw',
46    default       => 0,
47    metaclass     => 'MooseX::Getopt::Meta::Attribute',
48    cmd_aliases   => 'a',
49    documentation => 'auto delete queue when unused',
50);
51
52__PACKAGE__->meta->make_immutable;
53no Moose;
54
55sub abstract {
56    return 'declare queue, create if needed';
57}
58
59sub _validate_queue {
60    my ($self,) = @_;
61
62    return if !$self->queue;
63    $self->_check_queue();
64    return;
65}
66
67sub _run {
68    my ($self, $client, $opt, $args,) = @_;
69
70    my $method_frame = $client->declare_queue(
71        (map {$_ => $self->$_} qw(queue passive durable exclusive auto_delete))
72    )->method_frame;
73
74    print 'Declared queue', "\n";
75    for my $method (qw(queue message_count consumer_count)) {
76        print $method, ': ', $method_frame->$method, "\n";
77    }
78    return;
79}
80
811;
82
83