using System;
namespace XP.Hardware.Detector.Abstractions
{
///
/// 探测器操作结果封装 | Detector operation result wrapper
/// 统一封装成功/失败状态、数据和错误信息
///
public class DetectorResult
{
///
/// 操作是否成功 | Whether the operation succeeded
///
public bool IsSuccess { get; }
///
/// 错误消息 | Error message
///
public string ErrorMessage { get; }
///
/// 异常对象 | Exception object
///
public Exception Exception { get; }
///
/// 错误码 | Error code
///
public int ErrorCode { get; }
protected DetectorResult(bool isSuccess, string errorMessage = null, Exception exception = null, int errorCode = 0)
{
IsSuccess = isSuccess;
ErrorMessage = errorMessage;
Exception = exception;
ErrorCode = errorCode;
}
///
/// 创建成功结果 | Create success result
///
/// 成功消息 | Success message
/// 成功结果 | Success result
public static DetectorResult Success(string message = null)
{
return new DetectorResult(true, message);
}
///
/// 创建失败结果 | Create failure result
///
/// 错误消息 | Error message
/// 异常对象 | Exception object
/// 错误码 | Error code
/// 失败结果 | Failure result
public static DetectorResult Failure(string errorMessage, Exception exception = null, int errorCode = -1)
{
return new DetectorResult(false, errorMessage, exception, errorCode);
}
}
///
/// 带数据的探测器操作结果 | Detector operation result with data
///
/// 数据类型 | Data type
public class DetectorResult : DetectorResult
{
///
/// 结果数据 | Result data
///
public T Data { get; }
private DetectorResult(bool isSuccess, T data, string errorMessage = null, Exception exception = null, int errorCode = 0)
: base(isSuccess, errorMessage, exception, errorCode)
{
Data = data;
}
///
/// 创建成功结果 | Create success result
///
/// 结果数据 | Result data
/// 成功消息 | Success message
/// 成功结果 | Success result
public static DetectorResult Success(T data, string message = null)
{
return new DetectorResult(true, data, message);
}
///
/// 创建失败结果 | Create failure result
///
/// 错误消息 | Error message
/// 异常对象 | Exception object
/// 错误码 | Error code
/// 失败结果 | Failure result
public new static DetectorResult Failure(string errorMessage, Exception exception = null, int errorCode = -1)
{
return new DetectorResult(false, default(T), errorMessage, exception, errorCode);
}
}
}