1
+ {-# LANGUAGE OverloadedStrings #-}
2
+
1
3
module Pos.Crypto.Configuration
2
4
( ProtocolMagic (.. )
3
5
, ProtocolMagicId (.. )
@@ -11,6 +13,7 @@ import Control.Monad.Except (MonadError)
11
13
import Data.Aeson ((.:) , (.=) )
12
14
import qualified Data.Aeson as A
13
15
import Data.Aeson.Types (typeMismatch )
16
+ import qualified Data.HashMap.Strict as HM
14
17
import Data.List (lookup )
15
18
import Data.SafeCopy (base , deriveSafeCopySimple )
16
19
import Text.JSON.Canonical (FromJSON (.. ), JSValue (.. ), ToJSON (.. ),
@@ -102,10 +105,19 @@ instance A.FromJSON ProtocolMagic where
102
105
parseJSON v@ (A. Number _) = ProtocolMagic
103
106
<$> (ProtocolMagicId <$> A. parseJSON v)
104
107
<*> pure RequiresMagic
105
- parseJSON (A. Object o) = ProtocolMagic
106
- <$> (ProtocolMagicId <$> o .: " pm" )
107
- <*> o .: " requiresNetworkMagic"
108
- parseJSON invalid = typeMismatch " Coord" invalid
108
+ parseJSON (A. Object o) =
109
+ case HM. lookup " requiresNetworkMagic" o of
110
+ -- legacy codebase JSON encoding
111
+ Just (A. String " NMMustBeJust" )
112
+ -> ProtocolMagic <$> (ProtocolMagicId <$> o .: " pm" )
113
+ <*> pure RequiresMagic
114
+ Just (A. String " NMMustBeNothing" )
115
+ -> ProtocolMagic <$> (ProtocolMagicId <$> o .: " pm" )
116
+ <*> pure RequiresNoMagic
117
+ -- current codebase JSON encoding
118
+ _ -> ProtocolMagic <$> (ProtocolMagicId <$> o .: " pm" )
119
+ <*> o .: " requiresNetworkMagic"
120
+ parseJSON invalid = typeMismatch " ProtocolMagic" invalid
109
121
110
122
-- Canonical JSON instances
111
123
instance Monad m => ToJSON m ProtocolMagic where
0 commit comments