#nullable enable namespace Barotrauma { public abstract class Result where T: notnull where TError: notnull { public abstract bool IsSuccess { get; } public bool IsFailure => !IsSuccess; public static Success Success(T value) => new Success(value); public static Failure Failure(TError error) => new Failure(error); } public sealed class Success : Result where T: notnull where TError: notnull { public readonly T Value; public override bool IsSuccess => true; public Success(T value) { Value = value; } } public sealed class Failure : Result where T: notnull where TError: notnull { public readonly TError Error; public override bool IsSuccess => false; public Failure(TError error) { Error = error; } } }