add private types to coerce
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / Admin / Types.pm
1 package # hide from PAUSE
2     DBIx::Class::Admin::Types;
3
4 use MooseX::Types -declare => [qw(
5     DBICConnectInfo
6     DBICArrayRef
7     DBICHashRef
8 )];
9 use MooseX::Types::Moose qw/Int HashRef ArrayRef Str Any Bool/;
10 use MooseX::Types::JSON qw(JSON);
11
12 subtype DBICArrayRef,
13     as ArrayRef;
14
15 subtype DBICHashRef,
16     as HashRef;
17
18 coerce DBICArrayRef,
19   from JSON,
20   via { _json_to_data ($_) };
21
22 coerce DBICHashRef,
23   from JSON,
24   via { _json_to_data($_) };
25
26 subtype DBICConnectInfo,
27   as ArrayRef;
28
29 coerce DBICConnectInfo,
30   from JSON,
31    via { return _json_to_data($_) } ;
32
33 coerce DBICConnectInfo,
34   from Str,
35     via { return _json_to_data($_) };
36
37 coerce DBICConnectInfo,
38   from HashRef,
39    via { [ $_ ] };
40
41 sub _json_to_data {
42   my ($json_str) = @_;
43   my $json = JSON::Any->new(allow_barekey => 1, allow_singlequote => 1, relaxed=>1);
44   my $ret = $json->jsonToObj($json_str);
45   return $ret;
46 }
47
48 1;