Agenda/ISaveTarget.cs
using System.Text.Json.Nodes;
namespace PlanetMeat;
public interface ISaveTarget
{
public JsonNode NextSave { get; }
public void LoadFromSave( JsonNode save );
public void ClearSave();
}
public static partial class Extensions
{
public static JsonObject ToSaveObject<T>( this IEnumerable<KeyValuePair<string, T>> kvs ) where T : ISaveTarget
{
var json = new JsonObject();
foreach ( var (key, target) in kvs )
json.Add( key, target.NextSave );
return json;
}
public static void LoadFromSaveObject<T>( this IEnumerable<KeyValuePair<string, T>> kvs, JsonObject json ) where T : ISaveTarget
{
foreach ( var (key, target) in kvs )
{
if ( json.TryGetPropertyValue( key, out var n ) )
target.LoadFromSave( n );
}
}
public static void ClearSavedInfo<T>( this IEnumerable<KeyValuePair<string, T>> kvs ) where T : ISaveTarget
{
foreach ( var (_, target) in kvs )
target.ClearSave();
}
}