namespace SPTarkov.Server.Core.Utils.Json; public class LazyLoad(Func deserialize) { private readonly List> _lazyLoadTransformers = []; private readonly ReaderWriterLockSlim _lazyLoadTransformersLock = new(); /// /// Adds a transformer to modify the value during lazy loading. Transformers execute /// in registration order and the final result is cached until auto-cleanup. /// /// Function that transforms the value public void AddTransformer(Func transformer) { _lazyLoadTransformersLock.EnterWriteLock(); try { _lazyLoadTransformers.Add(transformer); } finally { _lazyLoadTransformersLock.ExitWriteLock(); } } public T? Value { get { var result = deserialize(); _lazyLoadTransformersLock.EnterReadLock(); try { foreach (var transform in _lazyLoadTransformers) { result = transform(result); } } finally { _lazyLoadTransformersLock.ExitReadLock(); } return result; } } }