Add typed high-level ruleset and set API

This commit is contained in:
Vibe Myass
2026-03-16 03:51:49 +00:00
parent 458494221e
commit 1dfc6aebfd
12 changed files with 644 additions and 7 deletions

View File

@@ -56,10 +56,21 @@ public sealed class NftablesClient : INftablesClient
}
}
/// <inheritdoc />
public NftValidationResult ValidateRuleset(NftRuleset ruleset, CancellationToken ct = default)
{
ct.ThrowIfCancellationRequested();
return Validate(CreateTypedRequest(ruleset), ct);
}
/// <inheritdoc />
public Task<NftValidationResult> ValidateAsync(NftApplyRequest request, CancellationToken ct = default)
=> Task.FromResult(Validate(request, ct));
/// <inheritdoc />
public Task<NftValidationResult> ValidateRulesetAsync(NftRuleset ruleset, CancellationToken ct = default)
=> Task.FromResult(ValidateRuleset(ruleset, ct));
/// <inheritdoc />
public void Apply(NftApplyRequest request, CancellationToken ct = default)
{
@@ -68,6 +79,13 @@ public sealed class NftablesClient : INftablesClient
_ = Execute(request, forceDryRun: null, ct);
}
/// <inheritdoc />
public void ApplyRuleset(NftRuleset ruleset, CancellationToken ct = default)
{
ct.ThrowIfCancellationRequested();
Apply(CreateTypedRequest(ruleset), ct);
}
/// <inheritdoc />
public Task ApplyAsync(NftApplyRequest request, CancellationToken ct = default)
{
@@ -75,6 +93,13 @@ public sealed class NftablesClient : INftablesClient
return Task.CompletedTask;
}
/// <inheritdoc />
public Task ApplyRulesetAsync(NftRuleset ruleset, CancellationToken ct = default)
{
ApplyRuleset(ruleset, ct);
return Task.CompletedTask;
}
/// <inheritdoc />
public NftSnapshot Snapshot(CancellationToken ct = default)
{
@@ -210,5 +235,8 @@ public sealed class NftablesClient : INftablesClient
return false;
}
private static NftApplyRequest CreateTypedRequest(NftRuleset ruleset)
=> NftApplyRequest.FromText(NftRulesetRenderer.Render(ruleset), dryRun: false);
private sealed record CommandExecutionResult(string? Output, string? Error);
}