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)); } }