Files
WCTDataMiner/src/Gpulse.WCT.DataAnalyzer.Core/Application/Parsing/IParser.cs
Scottxjw a3100c73c5 refactor(core): 重构核心分层结构并添加发布库聚合
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-13 15:00:39 +08:00

46 lines
1.3 KiB
C#

namespace Gpulse.WCT.DataAnalyzer.Core.Application.Parsing;
/// <summary>
/// 通用解析器接口
/// </summary>
public interface IParser<TRecord>
{
/// <summary>
/// 判断是否可以解析该行
/// </summary>
bool CanParse(string line);
/// <summary>
/// 解析日志行(单行模式)
/// </summary>
/// <param name="line">日志行内容</param>
/// <param name="scenarioId">关联的测试场景ID</param>
ParseResult<TRecord> Parse(string line, Guid scenarioId);
/// <summary>
/// 判断是否为多行记录的起始行
/// </summary>
bool IsMultiLineStart(string line) => false;
/// <summary>
/// 解析多行记录(子类可重写)
/// </summary>
ParseResult<TRecord>? ParseMultiLine(string[] lines, Guid scenarioId) => null;
}
/// <summary>
/// 解析结果
/// </summary>
public record ParseResult<TRecord>
{
public bool IsSuccess { get; init; }
public TRecord? Record { get; init; }
public string? ErrorType { get; init; }
public string? ErrorMessage { get; init; }
public static ParseResult<TRecord> Success(TRecord record) =>
new() { IsSuccess = true, Record = record };
public static ParseResult<TRecord> Failure(string errorType, string errorMessage) =>
new() { IsSuccess = false, ErrorType = errorType, ErrorMessage = errorMessage };
}