@@ -88,6 +88,18 @@ data TokenUpdateFailure
8888
8989instance Exception TokenUpdateFailure
9090
91+ data TokenBootFailure
92+ = NoTokenIdReturned
93+ | TokenIdNotValidJSON
94+ deriving (Show , Eq )
95+
96+ instance Monad m => ToJSON m TokenBootFailure where
97+ toJSON = \ case
98+ NoTokenIdReturned ->
99+ toJSON (" No TokenId returned" :: String )
100+ TokenIdNotValidJSON ->
101+ toJSON (" TokenId is not valid JSON" :: String )
102+
91103instance Monad m => ToJSON m TokenUpdateFailure where
92104 toJSON = \ case
93105 TokenNotParsable tk ->
@@ -102,7 +114,10 @@ instance Monad m => ToJSON m TokenUpdateFailure where
102114 toJSON (" Token update not requested from token owner" :: String )
103115
104116data TokenCommand a where
105- BootToken :: Wallet -> TokenCommand (WithTxHash TokenId )
117+ BootToken
118+ :: Wallet
119+ -> TokenCommand
120+ (AValidationResult TokenBootFailure (WithTxHash TokenId ))
106121 UpdateToken
107122 :: TokenId
108123 -> Wallet
@@ -168,13 +183,11 @@ tokenCmdCore command = do
168183 BootToken wallet -> do
169184 Submission submit <- ($ wallet) <$> askSubmit
170185 lift $ do
171- WithTxHash txHash jTokenId <- submit
172- $ \ address -> mpfsBootToken mpfs address
173- case jTokenId of
174- Just tkId -> case fromJSON tkId of
175- Nothing -> error " BootToken failed, TokenId is not valid JSON"
176- Just tokenId -> pure $ WithTxHash txHash (Just tokenId)
177- _ -> error " BootToken failed, no TokenId returned"
186+ WithTxHash txHash jTokenId <- submit $ mpfsBootToken mpfs
187+ runValidate $ do
188+ tkId <- liftMaybe NoTokenIdReturned jTokenId
189+ tokenId <- liftMaybe TokenIdNotValidJSON $ fromJSON tkId
190+ pure $ WithTxHash txHash (Just tokenId)
178191 EndToken tk wallet -> do
179192 Submission submit <- ($ wallet) <$> askSubmit
180193 lift $ do
0 commit comments