Skip to content

Commit 2333d5e

Browse files
Merge pull request #148 from gabriel-samfira/add-flow-style
[WiP] Add options to manipulate style
2 parents 01cba92 + 763a353 commit 2333d5e

4 files changed

Lines changed: 45 additions & 4 deletions

File tree

1 KB
Binary file not shown.
1 KB
Binary file not shown.

powershell-yaml.psm1

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ enum SerializationOptions {
2323
DefaultToStaticType = 16
2424
WithIndentedSequences = 32
2525
OmitNullValues = 64
26+
UseFlowStyle = 128
27+
UseSequenceFlowStyle = 256
2628
}
2729
$here = Split-Path -Parent $MyInvocation.MyCommand.Path
2830
$infinityRegex = [regex]::new('^[-+]?(\.inf|\.Inf|\.INF)$', "Compiled, CultureInvariant");
@@ -412,9 +414,11 @@ function Get-Serializer {
412414
}
413415

414416
$omitNull = $Options.HasFlag([SerializationOptions]::OmitNullValues)
417+
$useFlowStyle = $Options.HasFlag([SerializationOptions]::UseFlowStyle)
418+
$useSequenceFlowStyle = $Options.HasFlag([SerializationOptions]::UseSequenceFlowStyle)
415419

416-
$stringQuoted = $stringQuotedAssembly.GetType("StringQuotingEmitter")
417-
$builder = $stringQuoted::Add($builder, $omitNull)
420+
$stringQuoted = $stringQuotedAssembly.GetType("BuilderUtils")
421+
$builder = $stringQuoted::BuildSerializer($builder, $omitNull, $useFlowStyle, $useSequenceFlowStyle)
418422

419423
return $builder.Build()
420424
}
@@ -432,6 +436,7 @@ function ConvertTo-Yaml {
432436

433437
[Parameter(ParameterSetName = 'NoOptions')]
434438
[switch]$JsonCompatible,
439+
[switch]$UseFlowStyle,
435440

436441
[switch]$KeepArray,
437442

src/PowerShellYamlSerializer.cs

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,37 @@ public override void Emit(ScalarEventInfo eventInfo, IEmitter emitter) {
117117

118118
base.Emit(eventInfo, emitter);
119119
}
120-
// objectGraphVisitor, w => w.OnTop()
121-
public static SerializerBuilder Add(SerializerBuilder builder, bool omitNullValues = false) {
120+
}
121+
122+
public class FlowStyleAllEmitter: ChainedEventEmitter {
123+
public FlowStyleAllEmitter(IEventEmitter next): base(next) {}
124+
125+
public override void Emit(MappingStartEventInfo eventInfo, IEmitter emitter) {
126+
eventInfo.Style = MappingStyle.Flow;
127+
base.Emit(eventInfo, emitter);
128+
}
129+
130+
public override void Emit(SequenceStartEventInfo eventInfo, IEmitter emitter){
131+
eventInfo.Style = SequenceStyle.Flow;
132+
nextEmitter.Emit(eventInfo, emitter);
133+
}
134+
}
135+
136+
public class FlowStyleSequenceEmitter: ChainedEventEmitter {
137+
public FlowStyleSequenceEmitter(IEventEmitter next): base(next) {}
138+
139+
public override void Emit(SequenceStartEventInfo eventInfo, IEmitter emitter){
140+
eventInfo.Style = SequenceStyle.Flow;
141+
nextEmitter.Emit(eventInfo, emitter);
142+
}
143+
}
144+
145+
class BuilderUtils {
146+
public static SerializerBuilder BuildSerializer(
147+
SerializerBuilder builder,
148+
bool omitNullValues = false,
149+
bool useFlowStyle = false,
150+
bool useSequenceFlowStyle = false) {
122151
builder = builder
123152
.WithEventEmitter(next => new StringQuotingEmitter(next))
124153
.WithTypeConverter(new BigIntegerTypeConverter())
@@ -127,6 +156,13 @@ public static SerializerBuilder Add(SerializerBuilder builder, bool omitNullValu
127156
builder = builder
128157
.WithEmissionPhaseObjectGraphVisitor(args => new NullValueGraphVisitor(args.InnerVisitor));
129158
}
159+
if (useFlowStyle == true) {
160+
builder = builder.WithEventEmitter(next => new FlowStyleAllEmitter(next));
161+
}
162+
if (useSequenceFlowStyle == true) {
163+
builder = builder.WithEventEmitter(next => new FlowStyleSequenceEmitter(next));
164+
}
165+
130166
return builder;
131167
}
132168
}

0 commit comments

Comments
 (0)