using System; using System.Collections.Generic; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Text; namespace CryptoExchange.Net.Objects; /// /// Call result /// [DebuggerDisplay("{DebugView,nq}")] public record CallResult : ICallResult { private string DebugView => Success ? "Success" : $"Error: {Error}"; private static CallResult _successResult = new CallResult(); /// public Error? Error { get; init; } /// [MemberNotNullWhen(false, nameof(Error))] public bool Success => Error == null; /// /// Create an error response /// /// The error public static CallResult Fail(Error error) => new CallResult { Error = error }; /// /// Create a success result /// public static CallResult Ok() => _successResult; /// /// Create a success result /// /// Result type /// The original string data /// Data type public static CallResult Ok(T data, string? originalData = null) => new CallResult { Data = data, OriginalData = originalData }; /// /// Create an error response /// /// Result type /// The original string data /// The error public static CallResult Fail(Error error, string? originalData = null) => new CallResult { Error = error, OriginalData = originalData }; /// public override string ToString() { return Success ? $"Success" : $"Error: {Error}"; } } /// public record CallResult : CallResult, ICallResult { /// public new Error? Error { get => base.Error; init => base.Error = value; } /// [MemberNotNullWhen(false, nameof(Error))] [MemberNotNullWhen(true, nameof(Data))] public new bool Success => Error == null; /// /// The data returned by the call, only available when Success = true /// public T? Data { get; init; } /// /// The original data returned by the call, only available when `OutputOriginalData` is set to `true` in the client options /// public string? OriginalData { get; init; } /// /// Create an error response /// /// The error /// The original string data public static CallResult Fail(Error error, string? originalData = null) => new CallResult { Error = error, OriginalData = originalData }; /// /// Create a success result /// /// The data /// The original string data /// public static CallResult Ok(T data, string? originalData = null) => new CallResult { Data = data, OriginalData = originalData }; } /// /// Call result for an exchange /// /// Data type public record ExchangeCallResult : CallResult { /// /// Exchange name /// public string Exchange { get; set; } = string.Empty; /// /// Create an error response /// /// The exchange name /// The error /// The original string data public static ExchangeCallResult Fail(string exchange, Error error, string? originalData = null) => new ExchangeCallResult { Exchange = exchange, Error = error }; /// /// Create a success result /// /// The exchange name /// The data /// The original string data /// public static ExchangeCallResult Ok(string exchange, T data, string? originalData = null) => new ExchangeCallResult { Exchange = exchange, Data = data }; }