using System;
using System.Collections.Generic;
using MLEM.Misc;
using Newtonsoft.Json;
namespace MLEM.Data.Json {
///
/// An represents an object that can hold generic key-value based data.
/// This class uses for each object stored to ensure that objects with a custom get deserialized as an instance of their original type if is not set to .
/// Note that, using , adding instances directly is also possible.
///
#if NET7_0_OR_GREATER
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("The native code for instantiation of JsonTypeSafeWrapper instances might not be available at runtime.")]
#endif
public class JsonTypeSafeGenericDataHolder : IGenericDataHolder {
private static readonly string[] EmptyStrings = new string[0];
[JsonProperty]
private Dictionary data;
///
public void SetData(string key, T data) {
if (EqualityComparer.Default.Equals(data, default)) {
if (this.data != null)
this.data.Remove(key);
} else {
if (this.data == null)
this.data = new Dictionary();
this.data[key] = JsonTypeSafeWrapper.Of(data);
}
}
///
public T GetData(string key) {
if (this.data != null && this.data.TryGetValue(key, out var val))
return (T) val.Value;
return default;
}
///
public IEnumerable GetDataKeys() {
if (this.data == null)
return JsonTypeSafeGenericDataHolder.EmptyStrings;
return this.data.Keys;
}
}
}