using XFEExtension.NetCore.Exceptions;
namespace XFEExtension.NetCore.XFETransform.Json;
///
/// JSON 语法或转换错误的详细信息。
///
public sealed record XFEJsonError
{
///
/// 错误消息。
///
public required string Message { get; init; }
///
/// JSON 路径。
///
public required string Path { get; init; }
///
/// 错误字符在源文本中的零基偏移量;非文本错误为 -1。
///
public required int Position { get; init; }
///
/// 一基行号;非文本错误为 0。
///
public required int LineNumber { get; init; }
///
/// 一基列号;非文本错误为 0。
///
public required int ColumnNumber { get; init; }
}
///
/// XFE JSON 语法、序列化或反序列化异常。
///
public class XFEJsonException : XFEExtensionException
{
///
/// 错误详情。
///
public XFEJsonError Error { get; }
///
/// JSON 路径。
///
public string Path => Error.Path;
///
/// 错误字符偏移量。
///
public int Position => Error.Position;
///
/// 错误行号。
///
public int LineNumber => Error.LineNumber;
///
/// 错误列号。
///
public int ColumnNumber => Error.ColumnNumber;
internal XFEJsonException(XFEJsonError error)
: base(FormatMessage(error))
{
Error = error;
}
internal XFEJsonException(XFEJsonError error, Exception innerException)
: base(FormatMessage(error), innerException)
{
Error = error;
}
private static string FormatMessage(XFEJsonError error)
{
var location = error.Position < 0
? string.Empty
: $"(位置 {error.Position},行 {error.LineNumber},列 {error.ColumnNumber})";
return $"{error.Message} 路径:{error.Path}{location}";
}
}
///
/// JSON 值类型。
///
public enum XFEJsonValueKind
{
///
/// 尚未确定。
///
Undefined,
///
/// JSON 对象。
///
Object,
///
/// JSON 数组。
///
Array,
///
/// JSON 字符串。
///
String,
///
/// JSON 数字。
///
Number,
///
/// true。
///
True,
///
/// false。
///
False,
///
/// null。
///
Null
}