using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.SignalR; public abstract class Result { public abstract bool Success {get;} public static Result Ok(T value) => new SuccessResult(value); public static Result Fail(string error) => new FailureResult(error); } public sealed class SuccessResult : Result { public override bool Success => true; public T Value {get;} public SuccessResult(T value) { Value = value ?? throw new ArgumentNullException(nameof(value)); } } public sealed class FailureResult : Result { public override bool Success => false; public string Error {get;} public FailureResult(string error) { Error = error ?? throw new ArgumentNullException(nameof(error)); } } /* private Result(bool success, T? value, string? error) { Success = success; Value = value; Error = error; } } public static Result Ok(T value) => new(true,value,null); public static Result Fail(string error) => new(false, default, error); } */