using System; using System.Collections; using Assets._Project.Develop.Runtime.Utilities.DataManagement.DataRepository; using Assets._Project.Develop.Runtime.Utilities.DataManagement.KeysStorage; using Assets._Project.Develop.Runtime.Utilities.DataManagement.Serializers; namespace Assets._Project.Develop.Runtime.Utilities.DataManagement { public class SaveLoadService : ISaveLoadService { private readonly IDataSerializer _serializer; private readonly IDataKeysStorage _keysStorage; private readonly IDataRepository _repository; public SaveLoadService( IDataSerializer serializer, IDataKeysStorage keysStorage, IDataRepository repository) { _serializer = serializer; _keysStorage = keysStorage; _repository = repository; } public IEnumerator Exists(Action onExistsResult) where TData : ISaveData { string key = _keysStorage.GetKeyFor(); yield return _repository.Exists(key, result => onExistsResult?.Invoke(result)); } public IEnumerator Load(Action onLoad) where TData : ISaveData { string key = _keysStorage.GetKeyFor(); string serializedData = ""; yield return _repository.Read(key, result => serializedData = result); TData data = _serializer.Deserialize(serializedData); onLoad?.Invoke(data); } public IEnumerator Remove() where TData : ISaveData { string key = _keysStorage.GetKeyFor(); yield return _repository.Remove(key); } public IEnumerator Save(TData data) where TData : ISaveData { string serializedData = _serializer.Serialize(data); string key = _keysStorage.GetKeyFor(); yield return _repository.Write(key, serializedData); } } }