TeamCity.CSharpInteractive/TeamCityProperties.cs (30 lines of code) (raw):
// ReSharper disable ClassNeverInstantiated.Global
namespace TeamCity.CSharpInteractive;
using System.Collections;
using System.Diagnostics.CodeAnalysis;
using HostApi;
using JetBrains.TeamCity.ServiceMessages.Write.Special;
internal class TeamCityProperties : IProperties
{
private readonly IProperties _props;
private readonly ITeamCityWriter _teamCityWriter;
public TeamCityProperties(
[Tag("Default")] IProperties properties,
ITeamCityWriter teamCityWriter)
{
_props = properties;
_teamCityWriter = teamCityWriter;
}
public int Count => _props.Count;
public string this[string key]
{
get => _props[key];
set
{
_props[key] = value;
_teamCityWriter.WriteBuildParameter($"system.{key}", value);
}
}
public IEnumerator<KeyValuePair<string, string>> GetEnumerator() => _props.GetEnumerator();
IEnumerator IEnumerable.GetEnumerator() => ((IEnumerable)_props).GetEnumerator();
public bool TryGetValue(string key, [MaybeNullWhen(false)] out string value) => _props.TryGetValue(key, out value);
}