| File: Storage\DiskBasedResponseCache.CacheEntry.cs | Web Access |
| Project: src\src\Libraries\Microsoft.Extensions.AI.Evaluation.Reporting\CSharp\Microsoft.Extensions.AI.Evaluation.Reporting.csproj (Microsoft.Extensions.AI.Evaluation.Reporting) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; using System.Globalization; using System.IO; using System.Text.Json; using System.Text.Json.Serialization; using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.AI.Evaluation.Reporting.JsonSerialization; namespace Microsoft.Extensions.AI.Evaluation.Reporting.Storage; internal partial class DiskBasedResponseCache { [method: JsonConstructor] internal sealed class CacheEntry( string scenarioName, string iterationName, DateTime creation, DateTime expiration) { private const string DeserializationFailedMessage = "Unable to deserialize the cache entry file at {0}."; public string ScenarioName { get; } = scenarioName; public string IterationName { get; } = iterationName; public DateTime Creation { get; } = creation; public DateTime Expiration { get; } = expiration; public static CacheEntry Read(string cacheEntryFilePath) { using FileStream cacheEntryFile = File.OpenRead(cacheEntryFilePath); CacheEntry cacheEntry = JsonSerializer.Deserialize( cacheEntryFile, JsonUtilities.Default.CacheEntryTypeInfo) ?? throw new JsonException( string.Format(CultureInfo.CurrentCulture, DeserializationFailedMessage, cacheEntryFilePath)); return cacheEntry; } public static async Task<CacheEntry> ReadAsync( string cacheEntryFilePath, CancellationToken cancellationToken = default) { using FileStream cacheEntryFile = File.OpenRead(cacheEntryFilePath); CacheEntry cacheEntry = await JsonSerializer.DeserializeAsync( cacheEntryFile, JsonUtilities.Default.CacheEntryTypeInfo, cancellationToken).ConfigureAwait(false) ?? throw new JsonException( string.Format(CultureInfo.CurrentCulture, DeserializationFailedMessage, cacheEntryFilePath)); return cacheEntry; } public void Write(string cacheEntryFilePath) { using FileStream cacheEntryFile = File.Create(cacheEntryFilePath); JsonSerializer.Serialize(cacheEntryFile, this, JsonUtilities.Default.CacheEntryTypeInfo); } public async Task WriteAsync( string cacheEntryFilePath, CancellationToken cancellationToken = default) { using FileStream cacheEntryFile = File.Create(cacheEntryFilePath); await JsonSerializer.SerializeAsync( cacheEntryFile, this, JsonUtilities.Default.CacheEntryTypeInfo, cancellationToken).ConfigureAwait(false); } } }