]> www.average.org Git - pdns-pipe-nmc.git/blob - NmcJson.hs
651aa46f1be2631fd8245f8ff899544af59546c8
[pdns-pipe-nmc.git] / NmcJson.hs
1 {-# LANGUAGE OverloadedStrings #-}
2
3 module NmcJson  ( NmcRes(..)
4                 , NmcDom
5                 , emptyNmcDom
6                 ) where
7
8 import Data.ByteString.Lazy (ByteString)
9 import Data.Map (Map)
10 import Control.Applicative ((<$>), (<*>), empty)
11 import Data.Aeson
12
13 data NmcRRService = NmcRRService -- unused
14                         { srvName       :: String
15                         , srvProto      :: String
16                         , srvW1         :: Int
17                         , srvW2         :: Int
18                         , srvPort       :: Int
19                         , srvHost       :: [String]
20                         } deriving (Show)
21
22 instance FromJSON NmcRRService where
23         parseJSON (Object o) = NmcRRService
24                 <$> o .: "name"
25                 <*> o .: "proto"
26                 <*> o .: "w1"
27                 <*> o .: "w2"
28                 <*> o .: "port"
29                 <*> o .: "host"
30         parseJSON _ = empty
31
32 data NmcRRI2p = NmcRRI2p
33                         { i2pDestination :: String
34                         , i2pName        :: String
35                         , i2pB32         :: String
36                         } deriving (Show)
37
38 instance FromJSON NmcRRI2p where
39         parseJSON (Object o) = NmcRRI2p
40                 <$> o .: "destination"
41                 <*> o .: "name"
42                 <*> o .: "b32"
43         parseJSON _ = empty
44
45 data NmcDom = NmcDom    { domService     :: Maybe [[String]] -- [NmcRRService]
46                         , domIp          :: Maybe [String]
47                         , domIp6         :: Maybe [String]
48                         , domTor         :: Maybe String
49                         , domI2p         :: Maybe NmcRRI2p
50                         , domFreenet     :: Maybe String
51                         , domAlias       :: Maybe String
52                         , domTranslate   :: Maybe String
53                         , domEmail       :: Maybe String
54                         , domLoc         :: Maybe String
55                         , domInfo        :: Maybe Value
56                         , domNs          :: Maybe [String]
57                         , domDelegate    :: Maybe [String]
58                         , domImport      :: Maybe [[String]]
59                         , domMap         :: Maybe (Map String NmcDom)
60                         , domFingerprint :: Maybe [String]
61                         , domTls         :: Maybe (Map String
62                                                     (Map String [[String]]))
63                         , domDs          :: Maybe [[String]]
64                         } deriving (Show)
65
66 instance FromJSON NmcDom where
67         parseJSON (Object o) = NmcDom
68                 <$> o .:? "service"
69                 <*> o .:? "ip"
70                 <*> o .:? "ip6"
71                 <*> o .:? "tor"
72                 <*> o .:? "i2p"
73                 <*> o .:? "freenet"
74                 <*> o .:? "alias"
75                 <*> o .:? "translate"
76                 <*> o .:? "email"
77                 <*> o .:? "loc"
78                 <*> o .:? "info"
79                 <*> o .:? "ns"
80                 <*> o .:? "delegate"
81                 <*> o .:? "import"
82                 <*> o .:? "map"
83                 <*> o .:? "fingerprint"
84                 <*> o .:? "tls"
85                 <*> o .:? "ds"
86         parseJSON _ = empty
87
88 emptyNmcDom = NmcDom Nothing Nothing Nothing Nothing Nothing Nothing
89                      Nothing Nothing Nothing Nothing Nothing Nothing
90                      Nothing Nothing Nothing Nothing Nothing Nothing
91
92 data NmcRes = NmcRes    { resName       :: String
93                         , resValue      :: ByteString -- string with NmcDom
94                         , resTxid       :: String
95                         , resAddress    :: String
96                         , resExpires_in :: Int
97                         } deriving (Show)
98 instance FromJSON NmcRes where
99         parseJSON (Object o) = NmcRes
100                 <$> o .: "name"
101                 <*> o .: "value"
102                 <*> o .: "txid"
103                 <*> o .: "address"
104                 <*> o .: "expires_in"
105         parseJSON _ = empty