namespace Tiku.Application.Assets; public enum AssetSecurityScanVerdict { Clean, Infected } public sealed record AssetSecurityScanResult( AssetSecurityScanVerdict Verdict, string Provider, string? Signature, long BytesScanned, string RawResponse); public interface IAssetSecurityScanner { Task ScanAsync( Stream content, long? declaredLength, CancellationToken cancellationToken = default); Task CheckHealthAsync(CancellationToken cancellationToken = default); } public sealed class AssetSecurityScannerException(string code, string message, Exception? innerException = null) : Exception(message, innerException) { public string Code { get; } = code; }