private async Task <bool> DeserializeAsync <TState>(ILog log, IHaveState <TState> stateHolder, ISnapshotRepository <TState> repository)
        {
            await log.WriteInfoAsync(nameof(DeserializeAsync), "", "Loading state...");

            var state = await repository.TryGetAsync();

            if (state == null)
            {
                await log.WriteWarningAsync("SnapshotSerializer", nameof(DeserializeAsync),
                                            stateHolder.GetType().Name, "No snapshot found to deserialize");

                return(false);
            }

            string stateDescription;

            try
            {
                stateDescription = stateHolder.DescribeState(state);
            }
            catch (NotSupportedException)
            {
                await log.WriteWarningAsync(nameof(DeserializeAsync), "", "Not supported, skipping");

                return(false);
            }

            await log.WriteInfoAsync(nameof(DeserializeAsync), stateDescription, "Settings state...");

            try
            {
                stateHolder.SetState(state);
            }
            catch (NotSupportedException)
            {
                await log.WriteWarningAsync(nameof(DeserializeAsync), "", "Not supported, skipping");

                return(false);
            }

            await log.WriteInfoAsync(nameof(DeserializeAsync), "", "State was set");

            return(true);
        }
        public async Task DeserializeAsync()
        {
            await _log.WriteInfoAsync(nameof(DeserializeAsync), "", "Loading state...");

            var state = await _repository.TryGetAsync();

            if (state == null)
            {
                await _log.WriteWarningAsync("SnapshotSerializer", nameof(DeserializeAsync),
                                             _stateHolder.GetType().Name, "No snapshot found to deserialize");

                return;
            }

            await _log.WriteInfoAsync(nameof(DeserializeAsync), _stateHolder.DescribeState(state), "Settings state...");

            _stateHolder.SetState(state);

            await _log.WriteInfoAsync(nameof(DeserializeAsync), "", "State was set");
        }
 public async Task <bool> DeserializeAsync <TState>(IHaveState <TState> stateHolder, ISnapshotRepository <TState> repository)
 {
     return(await DeserializeAsync(_log.CreateComponentScope($"{nameof(SnapshotSerializer)}[{stateHolder.GetType().Name}]"), stateHolder, repository));
 }
 public async Task SerializeAsync <TState>(IHaveState <TState> stateHolder, ISnapshotRepository <TState> repository)
 {
     await SerializeAsync(_logFactory.CreateLog($"{nameof(SnapshotSerializer)}[{stateHolder.GetType().Name}]"), stateHolder, repository);
 }
 public SnapshotSerializer(
     IHaveState <TState> stateHolder,
     ISnapshotRepository <TState> repository,
     ILog log)
 {
     _stateHolder = stateHolder;
     _repository  = repository;
     _log         = log.CreateComponentScope($"{nameof(SnapshotSerializer<TState>)}[{_stateHolder.GetType().Name}]");
 }