VS
Size: a a a
VS
F
M
F
F
VK
M
A
public abstract class Result
{
public sealed class Ok : Result
{
public string AccessToken { get; }
public string RefreshToken { get; }
public Ok(string accessToken, string refreshToken)
{
AccessToken = accessToken;
RefreshToken = refreshToken;
}
}
public sealed class Unauthorized : Result
{
public static Unauthorized Instance = new Unauthorized();
private Unauthorized()
{
}
}
public sealed class HttpError : Result
{
public int StatusCode { get; }
public string Reason { get; }
public HttpError(int statusCode, string reason)
{
StatusCode = statusCode;
Reason = reason;
}
}
public static Result Return(string accessToken, string refreshToken) =>
new Ok(accessToken, refreshToken);
public static Result FlatMap(Result x, Func<Ok, Result> f) => x switch
{
Ok ok => f(ok),
HttpError httpError => httpError,
Unauthorized unauthorized => unauthorized,
_ => throw new ArgumentOutOfRangeException(nameof(x))
};
}
public abstract class RefreshTokenResult
{
private static object Dummy = new object();
protected RefreshTokenResult() => throw new InvalidOperationException();
private RefreshTokenResult(object _)
{
}
public sealed class Ok : RefreshTokenResult
{
public string AccessToken { get; }
public string RefreshToken { get; }
public Ok(string accessToken, string refreshToken) : base(Dummy)
{
AccessToken = accessToken;
RefreshToken = refreshToken;
}
}
public sealed class HttpError : RefreshTokenResult
{
public HttpStatusCode Code { get; }
public string Reason { get; }
public HttpError(HttpStatusCode code, string reason) : base(Dummy)
{
Code = code;
Reason = reason;
}
}
}
A
AH
A