epic-ts
[kivitendo-erp.git] / modules / override / YAML / Marshall.pm
1 use strict; use warnings;
2 package YAML::Marshall;
3
4 use YAML::Node ();
5
6 sub import {
7     my $class = shift;
8     no strict 'refs';
9     my $package = caller;
10     unless (grep { $_ eq $class} @{$package . '::ISA'}) {
11         push @{$package . '::ISA'}, $class;
12     }
13
14     my $tag = shift;
15     if ( $tag ) {
16         no warnings 'once';
17         $YAML::TagClass->{$tag} = $package;
18         ${$package . "::YamlTag"} = $tag;
19     }
20 }
21
22 sub yaml_dump {
23     my $self = shift;
24     no strict 'refs';
25     my $tag = ${ref($self) . "::YamlTag"} || 'perl/' . ref($self);
26     $self->yaml_node($self, $tag);
27 }
28
29 sub yaml_load {
30     my ($class, $node) = @_;
31     if (my $ynode = $class->yaml_ynode($node)) {
32         $node = $ynode->{NODE};
33     }
34     bless $node, $class;
35 }
36
37 sub yaml_node {
38     shift;
39     YAML::Node->new(@_);
40 }
41
42 sub yaml_ynode {
43     shift;
44     YAML::Node::ynode(@_);
45 }
46
47 1;