mirror of
https://github.com/space-wizards/RobustToolbox.git
synced 2026-09-01 09:37:03 +02:00
ROBUST_CVARS had multiple issues:
* Not composable, i.e. two independent systems can't easily layer CVars to set as they all have to go into one var
* Not sanitary, there's no way to store things that have a ";" in them because it'd always get used as separator.
This adds a new ROBUST_CVAR_* system. For example I can set ROBUST_CVAR_game__hostname=foobar to set a CVar via a single env var. A double underscore ("__") is replaced with a period to make the CVar names safe for environment variables.
Also made Robust.Shared.Configuration.EnvironmentVariables internal because wtf that should not be public no.
51 lines
1.6 KiB
C#
51 lines
1.6 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
|
|
namespace Robust.Shared.Configuration
|
|
{
|
|
internal static class EnvironmentVariables
|
|
{
|
|
/// <summary>
|
|
/// The environment variable for configuring CVar overrides. The value
|
|
/// of the variable should be passed as key-value equalities separated by
|
|
/// semicolons.
|
|
/// </summary>
|
|
public const string ConfigVarEnvironmentVariable = "ROBUST_CVARS";
|
|
|
|
public const string SingleVarPrefix = "ROBUST_CVAR_";
|
|
|
|
/// <summary>
|
|
/// Get the CVar overrides defined in the relevant environment variable.
|
|
/// </summary>
|
|
internal static IEnumerable<(string, string)> GetEnvironmentCVars()
|
|
{
|
|
// Handle ROBUST_CVARS.
|
|
var eVarString = Environment.GetEnvironmentVariable(ConfigVarEnvironmentVariable) ?? "";
|
|
|
|
foreach (var cVarPair in eVarString.Split(';', StringSplitOptions.RemoveEmptyEntries))
|
|
{
|
|
var pairParts = cVarPair.Split('=', 2);
|
|
yield return (pairParts[0], pairParts[1]);
|
|
}
|
|
|
|
// Handle ROBUST_CVAR_*
|
|
|
|
foreach (DictionaryEntry entry in Environment.GetEnvironmentVariables())
|
|
{
|
|
var key = (string)entry.Key;
|
|
var value = (string?)entry.Value;
|
|
|
|
if (value == null)
|
|
continue;
|
|
|
|
if (!key.StartsWith(SingleVarPrefix))
|
|
continue;
|
|
|
|
var varName = key[SingleVarPrefix.Length..].Replace("__", ".");
|
|
yield return (varName, value);
|
|
}
|
|
}
|
|
}
|
|
}
|