Files
speckle-sharp-connectors/Sdk/Speckle.Connectors.Common/Caching/SendConversionCache.cs
T
2025-03-17 11:51:07 +00:00

34 lines
1.2 KiB
C#

using System.Diagnostics.CodeAnalysis;
using Speckle.Sdk.Models;
using Speckle.Sdk.Serialisation;
namespace Speckle.Connectors.Common.Caching;
///<inheritdoc/>
public class SendConversionCache : ISendConversionCache
{
internal Dictionary<(string applicationId, string projectId), ObjectReference> Cache { get; set; } = new(); // NOTE: as this dude's accessed from potentially more operations at the same time, it might be safer to bless him as a concurrent dictionary.
public void StoreSendResult(string projectId, IReadOnlyDictionary<Id, ObjectReference> convertedReferences)
{
foreach (var kvp in convertedReferences)
{
Cache[(kvp.Key.Value, projectId)] = kvp.Value;
}
}
/// <inheritdoc/>
public void EvictObjects(IEnumerable<string> objectIds) =>
Cache = Cache
.Where(kvp => !objectIds.Contains(kvp.Key.applicationId))
.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
public void ClearCache() => Cache.Clear();
public bool TryGetValue(
string projectId,
string applicationId,
[NotNullWhen(true)] out ObjectReference? objectReference
) => Cache.TryGetValue((applicationId, projectId), out objectReference);
}