summaryrefslogtreecommitdiffstats
path: root/lib/smartmatch.pm
blob: 071e4ea9d94e109490a40fe81ac4342b95726711 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package smartmatch;
use strict;
use warnings;
use 5.010;
# ABSTRACT: pluggable smart matching backends

use parent 'DynaLoader';
use B::Hooks::OP::Check;

sub dl_load_flags { 0x01 }

__PACKAGE__->bootstrap(
    # we need to be careful not to touch $VERSION at compile time, otherwise
    # DynaLoader will assume it's set and check against it, which will cause
    # fail when being run in the checkout without dzil having set the actual
    # $VERSION
    exists $smartmatch::{VERSION}
        ? ${ $smartmatch::{VERSION} } : (),
);

sub import {
    my $package = shift;
    my ($cb) = @_;

    if (!ref($cb)) {
        my $engine = "smartmatch::engine::$cb";
        eval "require $engine; 1"
            or die "Couldn't load smartmatch engine $engine: $@";
        $cb = $engine->can('match') unless ref($cb);
    }

    smartmatch::register($cb);
}

sub unimport {
    smartmatch::unregister();
}

1;