With...
  Object subclass: #BittrexResponse
instanceVariableNames: 'success message result'
classVariableNames: ''
package: 'Bittrex'

  Object subclass: #BittrexMarketSummary
instanceVariableNames: 'MarketName High Low Volume Last
                BaseVolume TimeStamp Bid Ask OpenBuyOrders
                OpenSellOrders PrevDay Created DisplayMarketName'
classVariableNames: ''
package: 'Bittrex'

this code works great when the response holds good data...
  ZnClient new
url: 'https://bittrex.com/api/v1.1/public/getmarketSummary?market=BTC-LTC';
enforceHttpSuccess: true;
accept: ZnMimeType applicationJson;
contentReader: [ :entity | |reader|
reader := (NeoJSONReader on: entity readStream).
reader for: BittrexResponse do: [:m|
m mapInstVar: #success.
m mapInstVar: #message.
(m mapInstVar: #result) valueSchema: #ResultArray].
reader for: #ResultArray customDo: [ :mapping |
                       mapping listOfElementSchema: BittrexMarketSummary ].
reader mapInstVarsFor: BittrexMarketSummary.
      reader nextAs: BittrexResponse ];
   get.

i.e. a raw response looking like this....
(ZnClient new
url: 'https://bittrex.com/api/v1.1/public/getmarketsummary?market=BTC-LTC
<https://bittrex.com/api/v1.1/public/getticker?market=BTC-LTC>';
get) inspect.
==>
"'{""success"":true,""message"":"",""result"":[{""MarketName"":""BTC-LTC"",""High"":0.01982450,""Low"":0.01285257,""Volume"":1436429.81313360,""Last"":0.01842000,""BaseVolume"":24841.17217724,""TimeStamp"":""2017-12-13T05:56:25.937"",""Bid"":0.01840001,""Ask"":0.01842000,""OpenBuyOrders"":10140,""OpenSellOrders"":6306,""PrevDay"":0.01439800,""Created"":""2014-02-13T00:00:00""}]}'"


But for bad response looking like this...
(ZnClient new
url: 'https://bittrex.com/api/v1.1/public/getmarketsummary?market=INVALID';
get) inspect.
==> {"success":false,"message":"INVALID_MARKET","result":null}

the JSON handling code fails deep in the call stack with an error
     "NeoJSONParseError: [ expected"
which is not so friendly for users of the Bittrex library.

What are the different/recommended approaches with Zinc
for catching JSON errors such that I can pass "message"
as a higher level Error up the stack to the Bittrex user.

 cheers -ben

Reply via email to