16
16
using Serilog . Expressions . Ast ;
17
17
using Serilog . Expressions . Compilation ;
18
18
using Serilog . Templates . Ast ;
19
+ using Serilog . Templates . Encoding ;
19
20
using Serilog . Templates . Themes ;
20
21
21
22
namespace Serilog . Templates . Compilation ;
@@ -24,39 +25,40 @@ static class TemplateCompiler
24
25
{
25
26
public static CompiledTemplate Compile ( Template template ,
26
27
IFormatProvider ? formatProvider , NameResolver nameResolver ,
27
- TemplateTheme theme )
28
+ TemplateTheme theme ,
29
+ EncodedTemplateFactory encoder )
28
30
{
29
31
return template switch
30
32
{
31
33
LiteralText text => new CompiledLiteralText ( text . Text , theme ) ,
32
- FormattedExpression { Expression : AmbientNameExpression { IsBuiltIn : true , PropertyName : BuiltInProperty . Level } } level => new CompiledLevelToken (
33
- level . Format , level . Alignment , theme ) ,
34
+ FormattedExpression { Expression : AmbientNameExpression { IsBuiltIn : true , PropertyName : BuiltInProperty . Level } } level =>
35
+ encoder . Wrap ( new CompiledLevelToken ( level . Format , level . Alignment , theme ) ) ,
34
36
FormattedExpression
35
37
{
36
38
Expression : AmbientNameExpression { IsBuiltIn : true , PropertyName : BuiltInProperty . Exception } ,
37
39
Alignment : null ,
38
40
Format : null
39
- } => new CompiledExceptionToken ( theme ) ,
41
+ } => encoder . Wrap ( new CompiledExceptionToken ( theme ) ) ,
40
42
FormattedExpression
41
43
{
42
44
Expression : AmbientNameExpression { IsBuiltIn : true , PropertyName : BuiltInProperty . Message } ,
43
45
Format : null
44
- } message => new CompiledMessageToken ( formatProvider , message . Alignment , theme ) ,
45
- FormattedExpression expression => new CompiledFormattedExpression (
46
+ } message => encoder . Wrap ( new CompiledMessageToken ( formatProvider , message . Alignment , theme ) ) ,
47
+ FormattedExpression expression => encoder . MakeCompiledFormattedExpression (
46
48
ExpressionCompiler . Compile ( expression . Expression , formatProvider , nameResolver ) , expression . Format , expression . Alignment , formatProvider , theme ) ,
47
- TemplateBlock block => new CompiledTemplateBlock ( block . Elements . Select ( e => Compile ( e , formatProvider , nameResolver , theme ) ) . ToArray ( ) ) ,
49
+ TemplateBlock block => new CompiledTemplateBlock ( block . Elements . Select ( e => Compile ( e , formatProvider , nameResolver , theme , encoder ) ) . ToArray ( ) ) ,
48
50
Conditional conditional => new CompiledConditional (
49
51
ExpressionCompiler . Compile ( conditional . Condition , formatProvider , nameResolver ) ,
50
- Compile ( conditional . Consequent , formatProvider , nameResolver , theme ) ,
51
- conditional . Alternative == null ? null : Compile ( conditional . Alternative , formatProvider , nameResolver , theme ) ) ,
52
+ Compile ( conditional . Consequent , formatProvider , nameResolver , theme , encoder ) ,
53
+ conditional . Alternative == null ? null : Compile ( conditional . Alternative , formatProvider , nameResolver , theme , encoder ) ) ,
52
54
Repetition repetition => new CompiledRepetition (
53
55
ExpressionCompiler . Compile ( repetition . Enumerable , formatProvider , nameResolver ) ,
54
56
repetition . BindingNames . Length > 0 ? repetition . BindingNames [ 0 ] : null ,
55
57
repetition . BindingNames . Length > 1 ? repetition . BindingNames [ 1 ] : null ,
56
- Compile ( repetition . Body , formatProvider , nameResolver , theme ) ,
57
- repetition . Delimiter == null ? null : Compile ( repetition . Delimiter , formatProvider , nameResolver , theme ) ,
58
- repetition . Alternative == null ? null : Compile ( repetition . Alternative , formatProvider , nameResolver , theme ) ) ,
58
+ Compile ( repetition . Body , formatProvider , nameResolver , theme , encoder ) ,
59
+ repetition . Delimiter == null ? null : Compile ( repetition . Delimiter , formatProvider , nameResolver , theme , encoder ) ,
60
+ repetition . Alternative == null ? null : Compile ( repetition . Alternative , formatProvider , nameResolver , theme , encoder ) ) ,
59
61
_ => throw new NotSupportedException ( )
60
62
} ;
61
63
}
62
- }
64
+ }
0 commit comments