diff options
Diffstat (limited to 'lib/Net/XRC/Data')
-rw-r--r-- | lib/Net/XRC/Data/boolean.pm | 13 | ||||
-rw-r--r-- | lib/Net/XRC/Data/bytes.pm | 12 | ||||
-rw-r--r-- | lib/Net/XRC/Data/complex.pm | 22 | ||||
-rw-r--r-- | lib/Net/XRC/Data/int.pm | 12 | ||||
-rw-r--r-- | lib/Net/XRC/Data/list.pm | 20 | ||||
-rw-r--r-- | lib/Net/XRC/Data/null.pm | 12 | ||||
-rw-r--r-- | lib/Net/XRC/Data/string.pm | 15 |
7 files changed, 106 insertions, 0 deletions
diff --git a/lib/Net/XRC/Data/boolean.pm b/lib/Net/XRC/Data/boolean.pm new file mode 100644 index 0000000..7587cf1 --- /dev/null +++ b/lib/Net/XRC/Data/boolean.pm @@ -0,0 +1,13 @@ +package Net::XRC::Data::boolean; + +use strict; +use vars qw(@ISA); +use Net::XRC::Data; + +@ISA = qw(Net::XRC::Data); + +sub encode { + my $self = shift; + $$self ? '/T' : '/F'; +} + diff --git a/lib/Net/XRC/Data/bytes.pm b/lib/Net/XRC/Data/bytes.pm new file mode 100644 index 0000000..ccf02a1 --- /dev/null +++ b/lib/Net/XRC/Data/bytes.pm @@ -0,0 +1,12 @@ +package Net::XRC::Data::bytes; + +use strict; +use vars qw(@ISA); +use Net::XRC::Data; + +@ISA = qw(Net::XRC::Data); + +sub encode { + my $self = shift; + '{'. length($$self). '}'. $$self; +} diff --git a/lib/Net/XRC/Data/complex.pm b/lib/Net/XRC/Data/complex.pm new file mode 100644 index 0000000..5c0e5b6 --- /dev/null +++ b/lib/Net/XRC/Data/complex.pm @@ -0,0 +1,22 @@ +package Net::XRC::Data::complex; + +use strict; +use vars qw(@ISA); +use Net::XRC::Data; + +@ISA = qw(Net::XRC::Data); + +sub encode { + my $self = shift; + my %hash = %$self; + my $typename = delete $hash{_type}; + ":$typename(". join("\n", map { + "$_ ". + isa( $hash{$_}, 'Net::XRC::Data' ) + ? $hash{$_}->encode + : Net::XRC::Data->new($hash{$_})->encode + } + keys %hash + ). + ")"; +} diff --git a/lib/Net/XRC/Data/int.pm b/lib/Net/XRC/Data/int.pm new file mode 100644 index 0000000..7150872 --- /dev/null +++ b/lib/Net/XRC/Data/int.pm @@ -0,0 +1,12 @@ +package Net::XRC::Data::int; + +use strict; +use vars qw(@ISA); +use Net::XRC::Data; + +@ISA = qw(Net::XRC::Data); + +sub encode { + my $self = shift; + $$self; +} diff --git a/lib/Net/XRC/Data/list.pm b/lib/Net/XRC/Data/list.pm new file mode 100644 index 0000000..093a2fd --- /dev/null +++ b/lib/Net/XRC/Data/list.pm @@ -0,0 +1,20 @@ +package Net::XRC::Data::list; + +use strict; +use vars qw(@ISA); +use Net::XRC::Data; + +@ISA = qw(Net::XRC::Data); + +sub encode { + my $self = shift; + '('. join(' ', map { + ref($_) =~ /^Net::XRC::Data/ + ? $_->encode + : Net::XRC::Data->new($_)->encode + } + @$self + ). + ')'; +} + diff --git a/lib/Net/XRC/Data/null.pm b/lib/Net/XRC/Data/null.pm new file mode 100644 index 0000000..adf597e --- /dev/null +++ b/lib/Net/XRC/Data/null.pm @@ -0,0 +1,12 @@ +package Net::XRC::Data::null; + +use strict; +use vars qw(@ISA); +use Net::XRC::Data; + +@ISA = qw(Net::XRC::Data); + +sub encode { + my $self = shift; + '/NULL'; +} diff --git a/lib/Net/XRC/Data/string.pm b/lib/Net/XRC/Data/string.pm new file mode 100644 index 0000000..df27b03 --- /dev/null +++ b/lib/Net/XRC/Data/string.pm @@ -0,0 +1,15 @@ +package Net::XRC::Data::string; + +use strict; +use vars qw(@ISA); +use Net::XRC::Data; + +@ISA = qw(Net::XRC::Data); + +sub encode { + my $self = shift; + my $string = $$self; + $string =~ s/(["\\])/\\$1/g; + qq("$string"); +} + |