@@ -16,55 +16,100 @@ public LogEntryConverter(Settings settings)
1616 {
1717 _settings = settings ;
1818 }
19-
19+
20+ private class Context
21+ {
22+ internal Settings Settings { get ; }
23+ internal VerifyJsonWriter Writer { get ; }
24+ private int _sequence ;
25+ internal int CadenceOffset { get ; set ; }
26+
27+ internal bool IsWritingSequence => Using ( Settings . Sequence ) ;
28+ internal bool IsWritingLogLevel => Using ( Settings . LogLevel ) ;
29+ internal bool IsWritingCategoryName => Using ( Settings . CategoryName ) ;
30+ internal bool IsWritingFormattedMessage => Using ( Settings . FormattedMessage ) ;
31+
32+ internal int CurrentSequence ( LogEntry logEntry ) =>
33+ Using ( Settings . KeepSequenceCadence )
34+ ? logEntry . Sequence - CadenceOffset
35+ : _sequence ;
36+
37+ public Context ( VerifyJsonWriter writer , Settings settings )
38+ {
39+ _sequence = 0 ;
40+ Settings = settings ;
41+ Writer = writer ;
42+ }
43+
44+ internal void MoveToNextLogEntry ( )
45+ {
46+ _sequence ++ ;
47+ }
48+
49+ private bool Using ( Settings setting ) => ( Settings & setting ) != 0 ;
50+
51+ }
2052
2153 public override void Write ( VerifyJsonWriter writer , IEnumerable < LogEntry > logEntries )
2254 {
23- int sequence = 0 ;
24- int cadenceOffset = 0 ;
55+ var ctx = new Context ( writer , _settings ) ;
2556 bool isFirst = true ;
2657 writer . WriteStartArray ( ) ;
2758 foreach ( var logEntry in logEntries )
2859 {
2960 if ( isFirst )
3061 {
31- cadenceOffset = logEntry . Sequence ;
62+ ctx . CadenceOffset = logEntry . Sequence ;
3263 isFirst = false ;
3364 }
3465
3566 writer . WriteStartObject ( ) ;
3667
37- if ( _settings . WriteSequence ( ) )
38- {
39- writer . WritePropertyName ( nameof ( logEntry . Sequence ) ) ;
40- if ( _settings . Use ( Settings . KeepSequenceCadence ) )
41- writer . WriteValue ( logEntry . Sequence - cadenceOffset ) ;
42- else
43- writer . WriteValue ( sequence ) ;
44- }
45-
46- if ( _settings . WriteLogLevel ( ) )
47- {
48- writer . WritePropertyName ( nameof ( logEntry . LogLevel ) ) ;
49- writer . WriteValue ( logEntry . LogLevel . ToString ( ) ) ;
50- }
51-
52- if ( _settings . WriteCategoryName ( ) )
53- {
54- writer . WritePropertyName ( nameof ( logEntry . CategoryName ) ) ;
55- writer . WriteValue ( logEntry . CategoryName ) ;
56- }
57-
58- if ( _settings . WriteFormattedMessage ( ) )
59- {
60- writer . WritePropertyName ( nameof ( logEntry . FormattedMessage ) ) ;
61- writer . WriteValue ( logEntry . FormattedMessage ) ;
62- }
68+ WriteSequence ( ctx , logEntry ) ;
69+ WriteLogLevel ( ctx , logEntry ) ;
70+ WriteCategoryName ( ctx , logEntry ) ;
71+ WriteFormattedMessage ( ctx , logEntry ) ;
6372
6473 writer . WriteEndObject ( ) ;
65- sequence ++ ;
74+ ctx . MoveToNextLogEntry ( ) ;
6675 }
6776
6877 writer . WriteEndArray ( ) ;
6978 }
79+
80+ private static void WriteFormattedMessage ( Context ctx , LogEntry logEntry )
81+ {
82+ if ( ctx . IsWritingFormattedMessage )
83+ {
84+ ctx . Writer . WritePropertyName ( nameof ( logEntry . FormattedMessage ) ) ;
85+ ctx . Writer . WriteValue ( logEntry . FormattedMessage ) ;
86+ }
87+ }
88+
89+ private static void WriteCategoryName ( Context ctx , LogEntry logEntry )
90+ {
91+ if ( ctx . IsWritingCategoryName )
92+ {
93+ ctx . Writer . WritePropertyName ( nameof ( logEntry . CategoryName ) ) ;
94+ ctx . Writer . WriteValue ( logEntry . CategoryName ) ;
95+ }
96+ }
97+
98+ private static void WriteLogLevel ( Context ctx , LogEntry logEntry )
99+ {
100+ if ( ctx . IsWritingLogLevel )
101+ {
102+ ctx . Writer . WritePropertyName ( nameof ( logEntry . LogLevel ) ) ;
103+ ctx . Writer . WriteValue ( logEntry . LogLevel . ToString ( ) ) ;
104+ }
105+ }
106+
107+ private static void WriteSequence ( Context ctx , LogEntry logEntry )
108+ {
109+ if ( ctx . IsWritingSequence )
110+ {
111+ ctx . Writer . WritePropertyName ( nameof ( logEntry . Sequence ) ) ;
112+ ctx . Writer . WriteValue ( ctx . CurrentSequence ( logEntry ) ) ;
113+ }
114+ }
70115}
0 commit comments