Allow synonyms for localhost
[spider.git] / perl / DXJSON.pm
1 #
2 # A light shim over JSON for DXSpider general purpose serialising
3 #
4 # Copyright (c) 2020 Dirk Koopman, G1TLH
5 #
6
7 package DXJSON;
8
9 use strict;
10 use warnings;
11
12 use JSON;
13 use Data::Structure::Util qw(unbless);
14 use Scalar::Util qw(blessed);
15 use DXDebug;
16 use DXUtil;
17
18 our @ISA = qw(JSON);
19
20 sub new
21 {
22         return shift->SUPER::new()->canonical(1);
23 }
24
25 sub encode
26 {
27         my $json = shift;
28         my $ref = shift;
29         my $name = blessed $ref;
30         unbless($ref) if $name;
31         my $s;
32         
33         eval {$s = $json->SUPER::encode($ref) };
34         if ($s && !$@) {
35                 bless $ref, $name if $name;
36                 return $s;
37         }
38         else {
39                 $s = dd($ref);
40                 dbg "DXJSON::encode '$s' - $@";
41         }
42 }
43
44 sub decode
45 {
46         my $json = shift;
47         my $s = shift;
48         my $name = shift;
49         
50         my $ref;
51         eval { $ref = $json->SUPER::decode($s) };
52         if ($ref && !$@) {
53                 return bless $ref, $name if $name;
54                 return $ref;
55         }
56         else {
57                 dbg "DXJSON::decode '$s' - $@";
58         }
59         return undef;
60 }
61
62 1;