using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace BTCPayServer.Services.Rates { public class FallbackRateProvider : IRateProvider { IRateProvider[] _Providers; public FallbackRateProvider(IRateProvider[] providers) { if (providers == null) throw new ArgumentNullException(nameof(providers)); _Providers = providers; } public async Task GetRateAsync(string currency) { foreach(var p in _Providers) { try { return await p.GetRateAsync(currency).ConfigureAwait(false); } catch { } } throw new RateUnavailableException(currency); } public async Task> GetRatesAsync() { foreach (var p in _Providers) { try { return await p.GetRatesAsync().ConfigureAwait(false); } catch { } } throw new RateUnavailableException("ALL"); } } }