using System; using SpotifyAPI.Web.Http; namespace SpotifyAPI.Web { public class SpotifyClientConfig { public Uri BaseAddress { get; } public IAuthenticator Authenticator { get; } public IJSONSerializer JSONSerializer { get; } public IHTTPClient HTTPClient { get; } /// /// This config spefies the internal parts of the SpotifyClient. /// In apps where multiple different access tokens are used, one should create a default config and then use /// or to specify the auth details. /// /// /// /// /// public SpotifyClientConfig( Uri baseAddress, IAuthenticator authenticator, IJSONSerializer jsonSerializer, IHTTPClient httpClient ) { BaseAddress = baseAddress; Authenticator = authenticator; JSONSerializer = jsonSerializer; HTTPClient = httpClient; } internal IAPIConnector CreateAPIConnector() { Ensure.PropertyNotNull(BaseAddress, nameof(BaseAddress)); Ensure.PropertyNotNull(Authenticator, nameof(Authenticator), ". Use WithToken or WithAuthenticator to specify a authentication"); Ensure.PropertyNotNull(JSONSerializer, nameof(JSONSerializer)); Ensure.PropertyNotNull(HTTPClient, nameof(HTTPClient)); return new APIConnector(BaseAddress, Authenticator, JSONSerializer, HTTPClient); } public SpotifyClientConfig WithToken(string token, string tokenType = "Bearer") { Ensure.ArgumentNotNull(token, nameof(token)); return WithAuthenticator(new TokenHeaderAuthenticator(token, tokenType)); } public SpotifyClientConfig WithAuthenticator(IAuthenticator authenticator) { Ensure.ArgumentNotNull(authenticator, nameof(authenticator)); return new SpotifyClientConfig(BaseAddress, Authenticator, JSONSerializer, HTTPClient); } public static SpotifyClientConfig CreateDefault(string token, string tokenType = "Bearer") { Ensure.ArgumentNotNull(token, nameof(token)); return CreateDefault(new TokenHeaderAuthenticator(token, tokenType)); } /// /// Creates a default configuration, which is not useable without calling or /// /// public static SpotifyClientConfig CreateDefault() { return CreateDefault(null); } public static SpotifyClientConfig CreateDefault(IAuthenticator authenticator) { return new SpotifyClientConfig( SpotifyUrls.API_V1, authenticator, new NewtonsoftJSONSerializer(), new NetHttpClient() ); } } }