Welcome to mirror list, hosted at ThFree Co, Russian Federation.

StringKeyFormatterTemplate.tt « StringKey « Generator « MessagePack.GeneratorCore « src - github.com/aspnet/MessagePack-CSharp.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 296ef454487a0ecc6131f8cbc6d8cfa454ed4631 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
<#@ template debug="false" hostspecific="false" linePragmas="false" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="MessagePackCompiler.CodeAnalysis" #>
// <auto-generated>
// THIS (.cs) FILE IS GENERATED BY MPC(MessagePack-CSharp). DO NOT CHANGE IT.
// </auto-generated>

#pragma warning disable 618
#pragma warning disable 612
#pragma warning disable 414
#pragma warning disable 168

#pragma warning disable SA1129 // Do not use default value type constructor
#pragma warning disable SA1309 // Field names should not begin with underscore
#pragma warning disable SA1312 // Variable names should begin with lower-case letter
#pragma warning disable SA1403 // File may only contain a single namespace
#pragma warning disable SA1649 // File name should match first type name

namespace <#= Namespace #>
{
<# var list = new List<ValueTuple<MemberSerializationInfo, byte[]>>();
foreach (var objInfo in ObjectSerializationInfos) {
    list.Clear();
    foreach (var member in objInfo.Members) {
        var binary = EmbedStringHelper.Utf8.GetBytes(member.StringKey);
        list.Add(new ValueTuple<MemberSerializationInfo, byte[]>(member, binary));
    }

    bool isFormatterResolverNecessary = ShouldUseFormatterResolverHelper.ShouldUseFormatterResolver(objInfo.Members); #>
    public sealed class <#= objInfo.FormatterNameWithoutNameSpace #> : global::MessagePack.Formatters.IMessagePackFormatter<<#= objInfo.FullName #>>
<# foreach (var typeArg in objInfo.GenericTypeParameters.Where(x => x.HasConstraints)) {#>
        where <#= typeArg.Name #> : <#= typeArg.Constraints #>
<# }#>
    {
<# for (var i = 0; i < list.Count; i++) {
        var member = list[i].Item1;
        var binary = list[i].Item2; #>
        // <#= member.StringKey #>
        private static global::System.ReadOnlySpan<byte> GetSpan_<#= member.Name #>() => <#= EmbedStringHelper.ToByteArrayString(binary) #>;
<# } #>
<# if (list.Count != 0) { #>

<# } #>
        public void Serialize(ref global::MessagePack.MessagePackWriter writer, <#= objInfo.FullName #> value, global::MessagePack.MessagePackSerializerOptions options)
        {
<# if (objInfo.IsClass) { #>
            if (value is null)
            {
                writer.WriteNil();
                return;
            }

<# }

    if (isFormatterResolverNecessary) { #>
            var formatterResolver = options.Resolver;
<# }

    if (objInfo.HasIMessagePackSerializationCallbackReceiver) {
        if (objInfo.NeedsCastOnBefore) { #>
            ((global::MessagePack.IMessagePackSerializationCallbackReceiver)value).OnBeforeSerialize();
<# } else { #>
            value.OnBeforeSerialize();
<# } #>
<# } #>
            writer.WriteMapHeader(<#= list.Count #>);
<# foreach (var memberAndBinary in list) {
        var member = memberAndBinary.Item1; #>
            writer.WriteRaw(GetSpan_<#= member.Name #>());
            <#= member.GetSerializeMethodString() #>;
<# } #>
        }

        public <#= objInfo.FullName #> Deserialize(ref global::MessagePack.MessagePackReader reader, global::MessagePack.MessagePackSerializerOptions options)
        {
            if (reader.TryReadNil())
            {
<# if (objInfo.IsClass) { #>
                return null;
<# } else { #>
                throw new global::System.InvalidOperationException("typecode is null, struct not supported");
<# } #>
            }

<# if (objInfo.Members.Length == 0) { #>
            reader.Skip();
            var ____result = new <#= objInfo.GetConstructorString() #>;
<# } else { #>
            options.Security.DepthStep(ref reader);
<# if (isFormatterResolverNecessary) { #>
            var formatterResolver = options.Resolver;
<# } #>
            var length = reader.ReadMapHeader();
<# var canOverwrite = objInfo.ConstructorParameters.Length == 0;
        if (canOverwrite) { #>
            var ____result = new <#= objInfo.GetConstructorString() #>;
<# } else {
            foreach (var member in objInfo.Members.Where(x => x.IsWritable || objInfo.ConstructorParameters.Any(p => p.Equals(x)))) { #>
<# if (objInfo.ConstructorParameters.All(p => !p.Equals(member))) { #>
            var __<#= member.Name #>__IsInitialized = false;
<# } #>
            var __<#= member.Name #>__ = default(<#= member.Type #>);
<# } #>
<# } #>

            for (int i = 0; i < length; i++)
            {
                var stringKey = global::MessagePack.Internal.CodeGenHelpers.ReadStringSpan(ref reader);
                switch (stringKey.Length)
                {
                    default:
                    FAIL:
                      reader.Skip();
                      continue;
<#= StringKeyFormatterDeserializeHelper.Classify(objInfo, "                    ", canOverwrite) #>
                }
            }

<# if (!canOverwrite) { #>
            var ____result = new <#= objInfo.GetConstructorString() #>;
<# foreach (var member in objInfo.Members.Where(x => x.IsWritable && !objInfo.ConstructorParameters.Any(p => p.Equals(x)))) { #>
            if (__<#= member.Name #>__IsInitialized)
            {
                ____result.<#= member.Name #> = __<#= member.Name #>__;
            }

<# } #>
<# } #>
<# } #>
<# if (objInfo.HasIMessagePackSerializationCallbackReceiver) {
        if (objInfo.NeedsCastOnAfter) { #>
            ((global::MessagePack.IMessagePackSerializationCallbackReceiver)____result).OnAfterDeserialize();
<# } else { #>
            ____result.OnAfterDeserialize();
<# } #>
<# } #>
<# if (objInfo.Members.Length != 0) { #>
            reader.Depth--;
<# } #>
            return ____result;
        }
    }

<# } #>}

#pragma warning restore 168
#pragma warning restore 414
#pragma warning restore 618
#pragma warning restore 612

#pragma warning restore SA1129 // Do not use default value type constructor
#pragma warning restore SA1309 // Field names should not begin with underscore
#pragma warning restore SA1312 // Variable names should begin with lower-case letter
#pragma warning restore SA1403 // File may only contain a single namespace
#pragma warning restore SA1649 // File name should match first type name