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