using System;
using System.Collections.Generic;
using System.Text.Json.Serialization;
namespace StellaOps.Reachability.FixtureTests.PatchOracle;
///
/// Root model for patch-oracle fixture files.
///
public sealed record PatchOracleDefinition
{
[JsonPropertyName("schema_version")]
public string SchemaVersion { get; init; } = "patch-oracle/v1";
[JsonPropertyName("id")]
public required string Id { get; init; }
[JsonPropertyName("case_ref")]
public required string CaseRef { get; init; }
[JsonPropertyName("variant")]
public required string Variant { get; init; }
[JsonPropertyName("description")]
public string? Description { get; init; }
[JsonPropertyName("expected_functions")]
public IReadOnlyList ExpectedFunctions { get; init; } = Array.Empty();
[JsonPropertyName("expected_edges")]
public IReadOnlyList ExpectedEdges { get; init; } = Array.Empty();
[JsonPropertyName("expected_roots")]
public IReadOnlyList ExpectedRoots { get; init; } = Array.Empty();
[JsonPropertyName("forbidden_functions")]
public IReadOnlyList ForbiddenFunctions { get; init; } = Array.Empty();
[JsonPropertyName("forbidden_edges")]
public IReadOnlyList ForbiddenEdges { get; init; } = Array.Empty();
[JsonPropertyName("min_confidence")]
public double MinConfidence { get; init; } = 0.5;
[JsonPropertyName("strict_mode")]
public bool StrictMode { get; init; } = false;
[JsonPropertyName("created_at")]
public DateTimeOffset? CreatedAt { get; init; }
[JsonPropertyName("updated_at")]
public DateTimeOffset? UpdatedAt { get; init; }
}
///
/// Expected function/node in the graph.
///
public sealed record ExpectedFunction
{
[JsonPropertyName("symbol_id")]
public required string SymbolId { get; init; }
[JsonPropertyName("lang")]
public string? Lang { get; init; }
[JsonPropertyName("kind")]
public string? Kind { get; init; }
[JsonPropertyName("purl_pattern")]
public string? PurlPattern { get; init; }
[JsonPropertyName("required")]
public bool Required { get; init; } = true;
[JsonPropertyName("reason")]
public string? Reason { get; init; }
}
///
/// Expected edge in the graph.
///
public sealed record ExpectedEdge
{
[JsonPropertyName("from")]
public required string From { get; init; }
[JsonPropertyName("to")]
public required string To { get; init; }
[JsonPropertyName("kind")]
public string? Kind { get; init; }
[JsonPropertyName("min_confidence")]
public double? MinConfidence { get; init; }
[JsonPropertyName("required")]
public bool Required { get; init; } = true;
[JsonPropertyName("reason")]
public string? Reason { get; init; }
}
///
/// Expected root node in the graph.
///
public sealed record ExpectedRoot
{
[JsonPropertyName("id")]
public required string Id { get; init; }
[JsonPropertyName("phase")]
public string? Phase { get; init; }
[JsonPropertyName("required")]
public bool Required { get; init; } = true;
[JsonPropertyName("reason")]
public string? Reason { get; init; }
}
///
/// Index entry for an oracle.
///
public sealed record PatchOracleIndexEntry
{
[JsonPropertyName("id")]
public required string Id { get; init; }
[JsonPropertyName("case_ref")]
public required string CaseRef { get; init; }
[JsonPropertyName("variant")]
public required string Variant { get; init; }
[JsonPropertyName("path")]
public required string Path { get; init; }
}
///
/// Root model for patch-oracle INDEX.json.
///
public sealed record PatchOracleIndex
{
[JsonPropertyName("version")]
public string Version { get; init; } = "1.0";
[JsonPropertyName("schema")]
public string Schema { get; init; } = "patch-oracle/v1";
[JsonPropertyName("generated_at")]
public DateTimeOffset? GeneratedAt { get; init; }
[JsonPropertyName("description")]
public string? Description { get; init; }
[JsonPropertyName("oracles")]
public IReadOnlyList Oracles { get; init; } = Array.Empty();
}