Beispiel #1
0
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            SwitcheoPricesList pricesList = new SwitcheoPricesList();

            if (reader.TokenType == JsonToken.StartObject)
            {
                JObject rootObject = JObject.Load(reader);

                List <SwitcheoPrice> prices = new List <SwitcheoPrice>();

                foreach (var assetPrices in rootObject)
                {
                    foreach (JProperty subAssetPrice in assetPrices.Value)
                    {
                        SwitcheoPrice switcheoPrice = new SwitcheoPrice()
                        {
                            Pair  = $"{assetPrices.Key}{SwitcheoHelpers.PairSeparator}{subAssetPrice.Name}",
                            Price = (decimal)subAssetPrice.Value
                        };

                        prices.Add(switcheoPrice);
                    }
                }

                pricesList.Prices = prices.ToArray();
            }

            return(pricesList);
        }
Beispiel #2
0
        public void GetLastPrices_Should_RespondWithLastPricesArray()
        {
            // arrange
            var expected = new SwitcheoPricesList()
            {
                Prices = new SwitcheoPrice[]
                {
                    new SwitcheoPrice()
                    {
                        Pair = "GAS_NEO", Price = 0.1m
                    },
                    new SwitcheoPrice()
                    {
                        Pair = "SWTH_NEO", Price = 0.00050369m
                    },
                    new SwitcheoPrice()
                    {
                        Pair = "SWTH_GAS", Price = 0.06052445m
                    }
                }
            };

            var client = PrepareClient(JsonConvert.SerializeObject(expected));

            // act
            var result = client.GetLastPrices(new string[] { "GAS", "SWTH" });

            // assert
            Assert.AreEqual(true, result.Success);
            Assert.IsTrue(Compare.PublicInstancePropertiesEqual(expected.Prices[0], result.Data.Prices[0]));
            Assert.IsTrue(Compare.PublicInstancePropertiesEqual(expected.Prices[1], result.Data.Prices[1]));
            Assert.IsTrue(Compare.PublicInstancePropertiesEqual(expected.Prices[2], result.Data.Prices[2]));
        }
Beispiel #3
0
        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            writer.WriteStartObject();

            SwitcheoPricesList pricesList = (SwitcheoPricesList)value;

            if (pricesList != null && pricesList.Prices != null && pricesList.Prices.Length > 0)
            {
                Dictionary <string, List <KeyValuePair <string, decimal> > > groupedAssetsPrices = new Dictionary <string, List <KeyValuePair <string, decimal> > >();
                foreach (SwitcheoPrice switcheoPrice in pricesList.Prices)
                {
                    string fromAsset           = switcheoPrice.Pair.GetOfferAsset();
                    var    toAssetInformations = new KeyValuePair <string, decimal>(switcheoPrice.Pair.GetWantAsset(), switcheoPrice.Price);

                    if (!groupedAssetsPrices.ContainsKey(fromAsset))
                    {
                        groupedAssetsPrices.Add(fromAsset, new List <KeyValuePair <string, decimal> >());
                    }

                    groupedAssetsPrices[fromAsset].Add(toAssetInformations);
                }

                foreach (var assetPrices in groupedAssetsPrices)
                {
                    writer.WritePropertyName(assetPrices.Key);
                    writer.WriteStartObject();

                    foreach (var subAssetPrice in assetPrices.Value)
                    {
                        writer.WritePropertyName(subAssetPrice.Key);
                        writer.WriteValue(subAssetPrice.Value);
                    }

                    writer.WriteEndObject();
                }
            }

            writer.WriteEndObject();
        }