Example #1
0
            /// <summary>
            /// Resolves and returns a <see cref="Uri"/> based on the template given
            /// during construction and the data provided for <paramref name="templateData"/>.
            /// </summary>
            public Uri?ResolveTemplate(UriTemplateData templateData)
            {
                if (templateData is null)
                {
                    throw new ArgumentNullException(nameof(templateData));
                }

                var rawUri = _templateResolver(templateData);

                if (string.IsNullOrWhiteSpace(rawUri))
                {
                    return(null);
                }

                return(new Uri(rawUri));
            }
        /// <inheritdoc/>
        public async Task <Image?> GetAvatarAsync(string email, string?name, int imageSize)
        {
            var templateData = new UriTemplateData(email, name, imageSize);

            foreach (var provider in _subProvider)
            {
                var avatar = provider switch
                {
                    UriTemplateResolver r => await _downloader.DownloadImageAsync(r.ResolveTemplate(templateData)),
                    _ => await provider.GetAvatarAsync(email, name, imageSize),
                };

                if (avatar is not null)
                {
                    return(avatar);
                }
            }

            return(null);
        }