public async Task <UserInfoUnion> Login(string userName, string password, CaptchaAnswer captchaAnswer = null) { _logger.Method().Start($"{userName} | {captchaAnswer}"); Union3 <UserInfo, LoginErrorDto, Exception> userInfoUnion = await _internalAuthService.Login(userName, password, captchaAnswer); return(userInfoUnion.Match(userInfo => { ProcessUserInfo(userInfo); return new UserInfoUnion.Case1(userInfo.RetWithLog(_logger).Log()); }, error => string.IsNullOrWhiteSpace(error.CaptchaKey) || string.IsNullOrWhiteSpace(error.CaptchaUrl) ? (UserInfoUnion) new UserInfoUnion.Case2(new LoginError(error.Error, error.ErrorDescription).RetWithLog(_logger).Log()) : new UserInfoUnion.Case4(new CaptchaQuery(error.CaptchaKey, error.CaptchaUrl).RetWithLog(_logger).Log()), ex => new UserInfoUnion.Case3(ex.RetWithLog(_logger).Log()))); }