Dropped YAML, we now use PAML, "PAML Ain't Markup Language"
[catagits/HTTP-Body.git] / t / lib / PAML.pm
diff --git a/t/lib/PAML.pm b/t/lib/PAML.pm
new file mode 100644 (file)
index 0000000..f24ba5d
--- /dev/null
@@ -0,0 +1,84 @@
+package PAML;
+use strict;
+use warnings;
+
+# "PAML Ain't Markup Language"!!!
+
+use Carp         qw[croak];
+use Data::Dumper qw[];
+use IO::File     qw[];
+
+BEGIN {
+    our @EXPORT_OK = qw(
+        DumpFile
+        LoadFile
+    );
+
+    require Exporter;
+    *import = \&Exporter::import;
+}
+
+sub DumpFile ($$) {
+    my ($path, $struct) = @_;
+
+    my $data = do {
+        local $Data::Dumper::Indent = 1;
+        local $Data::Dumper::Purity = 1;
+        local $Data::Dumper::Terse  = 1;
+        local $Data::Dumper::Useqq  = 1;
+        Data::Dumper->Dump([$struct], ['PAML']);
+    };
+
+    my $io = IO::File->new($path, '>')
+      || croak(qq[Couldn't open path '$path' in write mode: $!]);
+
+    $io->binmode
+      || croak(qq[Couldn't binmode filehandle: $!]);
+
+    $io->print($data)
+      || croak(qq[Couldn't write filehandle: $!]);
+
+    $io->close
+      || croak(qq[Couldn't close filehandle: $!]);
+
+    1;
+}
+
+sub LoadFile ($) {
+    my ($path) = @_;
+
+    my $data = do {
+
+        my $io = IO::File->new($path, '<')
+          || corak(qq[Couldn't open path '$path' in read mode: $!]);
+
+        $io->binmode
+          || croak(qq[Couldn't binmode filehandle: $!]);
+
+        my $exp = -s $path;
+        my $buf = do { local $/; <$io> };
+        my $got = length $buf;
+
+        $io->close
+          || croak(qq[Couldn't close filehandle: $!]);
+
+        ($exp == $got)
+          || croak(qq[I/O read mismatch, expexted: $exp got: $got]);
+
+        $buf;
+    };
+
+    if (substr($data, 0, 1) eq '{') {
+        substr($data, 0, 0, '+');
+    }
+
+    my $struct = eval($data);
+
+    (!$@)
+      || croak(qq[LoadFile couldn't eval data: $@]);
+
+    $struct;
+}
+
+1;
+