#  You may distribute under the terms of either the GNU General Public License
#  or the Artistic License (the same terms as Perl itself)
#  (C) Paul Evans, 2015-2021 -- leonerd@leonerd.org.uk

package Event::Distributor::Action 0.06;

use v5.14;
use warnings;
use base qw( Event::Distributor::_Event );

use Carp;

use Future;

=head1 NAME

C<Event::Distributor::Action> - an event that requires one subscriber


This subclass of L<Event::Distributor::_Event> requires exactly one subscriber
at the time that it is invoked. It passes on the caller's arguments to the
subscriber, and the subscriber's return value back to the caller.


sub subscribe
   my $self = shift;
   $self->subscribers and croak "Too many subscribers";

   $self->SUPER::subscribe( @_ );

sub fire
   my $self = shift;
   my ( $dist, @args ) = @_;

   my @subs = $self->subscribers or
      return Future->fail( "No subscribers" );

   Future->call( $subs[0], $dist, @args );

=head1 AUTHOR

Paul Evans <leonerd@leonerd.org.uk>