using IStation.Epanet.Enums;
using System;
namespace IStation.Epanet
{
///Epanet exception codes handler.
public class EnException : Exception
{
///Array of arguments to be used in the error string creation.
private readonly object[] _arguments;
///Epanet error code.
protected readonly ErrorCode _code;
/// Get error code.
/// Code id.
public ErrorCode Code => _code;
///Constructor from error code id.
///Error code id.
public EnException(ErrorCode code)
{
_arguments = null;
_code = code;
}
/// Constructor from error code id and multiple arguments.
/// Error code id.
/// Extra arguments.
///
public EnException(ErrorCode code, params object[] arg)
{
_code = code;
_arguments = arg;
}
/// Constructor from error code id and inner exception.
/// Error code id.
///
///
public EnException(ErrorCode code, Exception innerException)
: base(null, innerException)
{
_code = code;
}
///Handles the exception string conversion.
/// Final error string.
public override string Message
{
get
{
string format;
try
{
format = _code.GetMsg();
}
catch (Exception)
{
format = null;
}
if (format == null)
return string.Format("Unknown error message ({0})", _code);
return _arguments != null ? string.Format(format, _arguments) : format;
}
}
}
}