87 lines
2.3 KiB
C#
87 lines
2.3 KiB
C#
|
using System;
|
||
|
using Newtonsoft.Json;
|
||
|
using UnityEngine;
|
||
|
|
||
|
namespace Unity.Services.Core.Configuration
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// Wrapper for project configuration values.
|
||
|
/// </summary>
|
||
|
[Serializable]
|
||
|
class ConfigurationEntry
|
||
|
{
|
||
|
[JsonRequired]
|
||
|
[SerializeField]
|
||
|
string m_Value;
|
||
|
|
||
|
/// <summary>
|
||
|
/// Get the stored configuration value.
|
||
|
/// </summary>
|
||
|
[JsonIgnore]
|
||
|
public string Value => m_Value;
|
||
|
|
||
|
[JsonRequired]
|
||
|
[SerializeField]
|
||
|
bool m_IsReadOnly;
|
||
|
|
||
|
/// <summary>
|
||
|
/// If true, <see cref="Value"/> can't be changed.
|
||
|
/// </summary>
|
||
|
[JsonIgnore]
|
||
|
public bool IsReadOnly
|
||
|
{
|
||
|
get => m_IsReadOnly;
|
||
|
internal set => m_IsReadOnly = value;
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Create a new instance of the <see cref="ConfigurationEntry"/> class.
|
||
|
/// </summary>
|
||
|
/// <remarks>
|
||
|
/// Required for serialization.
|
||
|
/// </remarks>
|
||
|
public ConfigurationEntry() {}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Create a new instance of the <see cref="ConfigurationEntry"/> class.
|
||
|
/// </summary>
|
||
|
/// <param name="value">
|
||
|
/// The value to store.
|
||
|
/// </param>
|
||
|
/// <param name="isReadOnly">
|
||
|
/// If true, the value can't be changed after construction.
|
||
|
/// </param>
|
||
|
public ConfigurationEntry(string value, bool isReadOnly = false)
|
||
|
{
|
||
|
m_Value = value;
|
||
|
m_IsReadOnly = isReadOnly;
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Set <see cref="Value"/> only if <see cref="IsReadOnly"/> is false.
|
||
|
/// Does nothing otherwise.
|
||
|
/// </summary>
|
||
|
/// <param name="value">
|
||
|
/// The new value to store.
|
||
|
/// </param>
|
||
|
/// <returns>
|
||
|
/// Return true if <see cref="IsReadOnly"/> is false;
|
||
|
/// return false otherwise.
|
||
|
/// </returns>
|
||
|
public bool TrySetValue(string value)
|
||
|
{
|
||
|
if (IsReadOnly)
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
m_Value = value;
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
public static implicit operator string(ConfigurationEntry entry) => entry.Value;
|
||
|
|
||
|
public static implicit operator ConfigurationEntry(string value) => new ConfigurationEntry(value);
|
||
|
}
|
||
|
}
|