32 lines
1.2 KiB
C#
32 lines
1.2 KiB
C#
using System.Collections.Generic;
|
|
using System.Collections.ObjectModel;
|
|
|
|
namespace game.PlayerDataStorage
|
|
{
|
|
public enum PlayerKVError
|
|
{
|
|
None, Validation, Unauthorized, Http, Network, Timeout, Cancelled, Protocol
|
|
}
|
|
|
|
public sealed class PlayerKVResult
|
|
{
|
|
public bool Success => Error == PlayerKVError.None;
|
|
public PlayerKVError Error { get; }
|
|
public int? StatusCode { get; }
|
|
// Only a successful Get has Data. Failure must never look like an empty save.
|
|
public IReadOnlyDictionary<string, string> Data { get; }
|
|
// A failed write that entered the transport may already have reached the server.
|
|
// This is conservative, including HTTP failures. Do not blindly replay the write.
|
|
public bool MayHaveCommitted { get; }
|
|
|
|
internal PlayerKVResult(PlayerKVError error, int? statusCode = null,
|
|
Dictionary<string, string> data = null, bool mayHaveCommitted = false)
|
|
{
|
|
Error = error;
|
|
StatusCode = statusCode;
|
|
Data = data == null ? null : new ReadOnlyDictionary<string, string>(data);
|
|
MayHaveCommitted = mayHaveCommitted;
|
|
}
|
|
}
|
|
}
|