1a26f1aa4f3a694a9781aa1ea902dc4afea7edc3
[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 DXDebug;
15 use DXUtil;
16
17 our @ISA = qw(JSON);
18
19 sub new
20 {
21         return shift->SUPER::new()->canonical(1);
22 }
23
24 sub encode
25 {
26         my $json = shift;
27         my $ref = shift;
28         my $name = ref $ref;
29         
30         unbless($ref) if $name && $name ne 'HASH';
31         my $s;
32         
33         eval {$s = $json->SUPER::encode($ref) };
34         if ($s && !$@) {
35                 bless $ref, $name if $name && $name ne 'HASH';
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;