NAME
    Sub::HandlesVia - alternative handles_via implementation

SYNOPSIS
     package Kitchen {
       use Moo;
       use Sub::HandlesVia;
       use Types::Standard qw( ArrayRef Str );
   
       has food => (
         is          => 'ro',
         isa         => ArrayRef[Str],
         handles_via => 'Array',
         default     => sub { [] },
         handles     => {
           'add_food'    => 'push',
           'find_food'   => 'grep',
         },
       );
     }

     my $kitchen = Kitchen->new;
     $kitchen->add_food('Bacon');
     $kitchen->add_food('Eggs');
     $kitchen->add_food('Sausages');
     $kitchen->add_food('Beans');
 
     my @foods = $kitchen->find_food(sub { /^B/i });

DESCRIPTION
    If you've used Moose's native attribute traits, or MooX::HandlesVia
    before, you should have a fairly good idea what this does.

    Why re-invent the wheel? Well, this is an implementation that should work
    okay with Moo, Moose, Mouse, and any other OO toolkit you throw at it. One
    ring to rule them all, so to speak.

    For details of how to use it, see the manual.

    Sub::HandlesVia::Manual::WithMoo
        How to use Sub::HandlesVia with Moo and Moo::Role.

    Sub::HandlesVia::Manual::WithMoose
        How to use Sub::HandlesVia with Moose and Moose::Role.

    Sub::HandlesVia::Manual::WithMouse
        How to use Sub::HandlesVia with Mouse and Mouse::Role.

    Sub::HandlesVia::Manual::WithMite
        How to use Sub::HandlesVia with Mite.

    Sub::HandlesVia::Manual::WithClassTiny
        How to use Sub::HandlesVia with Class::Tiny.

    Sub::HandlesVia::Manual::WithObjectPad
        How to use Sub::HandlesVia with Object::Pad classes.

    Sub::HandlesVia::Manual::WithGeneric
        How to use Sub::HandlesVia with other OO toolkits, and hand-written
        Perl classes.

    Note: as Sub::HandlesVia needs to detect which toolkit you are using, and
    often needs to detect whether your package is a class or a role, it needs
    to be loaded *after* Moo/Moose/Mouse/etc. Your `use Moo` or `use
    Moose::Role` or whatever needs to be *before* your `use Sub::HandlesVia`.

BUGS
    Please report any bugs to
    <https://github.com/tobyink/p5-sub-handlesvia/issues>.

    (There are known bugs for Moose native types that do coercion.)

SEE ALSO
    Guides for use with different OO toolkits:
    Sub::HandlesVia::Manual::WithMoo, Sub::HandlesVia::Manual::WithMoose,
    Sub::HandlesVia::Manual::WithMouse, Sub::HandlesVia::Manual::WithMite,
    Sub::HandlesVia::Manual::WithClassTiny,
    Sub::HandlesVia::Manual::WithObjectPad,
    Sub::HandlesVia::Manual::WithGeneric.

    Documentation for delegatable methods:
    Sub::HandlesVia::HandlerLibrary::Array,
    Sub::HandlesVia::HandlerLibrary::Blessed,
    Sub::HandlesVia::HandlerLibrary::Bool,
    Sub::HandlesVia::HandlerLibrary::Code,
    Sub::HandlesVia::HandlerLibrary::Counter,
    Sub::HandlesVia::HandlerLibrary::Enum,
    Sub::HandlesVia::HandlerLibrary::Hash,
    Sub::HandlesVia::HandlerLibrary::Number,
    Sub::HandlesVia::HandlerLibrary::Scalar, and
    Sub::HandlesVia::HandlerLibrary::String.

    Other implementations of the same concept: Moose::Meta::Attribute::Native,
    MouseX::NativeTraits, and MooX::HandlesVia with Data::Perl.

    Comparison of those: Sub::HandlesVia::Manual::Comparison

    Sub::HandlesVia::Declare is a helper for declaring Sub::HandlesVia
    delegations at compile-time, useful for Object::Pad and (to a lesser
    extent) Class::Tiny.

AUTHOR
    Toby Inkster <tobyink@cpan.org>.

COPYRIGHT AND LICENCE
    This software is copyright (c) 2020, 2022 by Toby Inkster.

    This is free software; you can redistribute it and/or modify it under the
    same terms as the Perl 5 programming language system itself.

DISCLAIMER OF WARRANTIES
    THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
    WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
    MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.

