Files
csharp/src/KubernetesClient/StringQuotingEmitter.cs
Boshi Lian 16845bae1d Style fix1 (#512)
* fix SA1505 and SA1508

* fix SA1116

* fix SA1009

* fix SA1019

* fix SA1127

* fix SA1128

* fix SA1134

* fix indent

* allow CA2227

* fix CA1810

* using clean up

* fix naming

* fix CA1806

* fix await

* Revert "fix CA1806"

This reverts commit a3b465087fdaf26ec461272373ee9810a90de2cc.

* fix dotnet format

* allow SA1009
2020-11-01 12:24:51 -08:00

54 lines
1.7 KiB
C#

using System;
using System.Text.RegularExpressions;
using YamlDotNet.Core;
using YamlDotNet.Serialization;
using YamlDotNet.Serialization.EventEmitters;
namespace k8s
{
// adapted from https://github.com/cloudbase/powershell-yaml/blob/master/powershell-yaml.psm1
public class StringQuotingEmitter : ChainedEventEmitter
{
// Patterns from https://yaml.org/spec/1.2/spec.html#id2804356
private static readonly Regex QuotedRegex =
new Regex(@"^(\~|null|true|false|-?(0|[1-9][0-9]*)(\.[0-9]*)?([eE][-+]?[0-9]+)?)?$");
public StringQuotingEmitter(IEventEmitter next)
: base(next)
{
}
/// <inheritdoc/>
public override void Emit(ScalarEventInfo eventInfo, IEmitter emitter)
{
var typeCode = eventInfo.Source.Value != null
? Type.GetTypeCode(eventInfo.Source.Type)
: TypeCode.Empty;
switch (typeCode)
{
case TypeCode.Char:
if (char.IsDigit((char)eventInfo.Source.Value))
{
eventInfo.Style = ScalarStyle.DoubleQuoted;
}
break;
case TypeCode.String:
var val = eventInfo.Source.Value.ToString();
if (QuotedRegex.IsMatch(val))
{
eventInfo.Style = ScalarStyle.DoubleQuoted;
}
else if (val.IndexOf('\n') > -1)
{
eventInfo.Style = ScalarStyle.Literal;
}
break;
}
base.Emit(eventInfo, emitter);
}
}
}