Skip to content

Commit 9fa7ac0

Browse files
committed
Add additional options to serializer generators.
This commit add supports for CompatibilityOptions and WithAsync in SerializerGenerator and mpu.exe.
1 parent 8034cd4 commit 9fa7ac0

File tree

5 files changed

+94
-5
lines changed

5 files changed

+94
-5
lines changed

src/MsgPack/Serialization/ISerializerGeneratorConfiguration.cs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
//
33
// MessagePack for CLI
44
//
5-
// Copyright (C) 2010-2015 FUJIWARA, Yusuke
5+
// Copyright (C) 2010-2016 FUJIWARA, Yusuke
66
//
77
// Licensed under the Apache License, Version 2.0 (the "License");
88
// you may not use this file except in compliance with the License.
@@ -79,6 +79,23 @@ internal interface ISerializerGeneratorConfiguration
7979
/// </value>
8080
bool WithNullableSerializers { get; set; }
8181

82+
/// <summary>
83+
/// Gets the compatibility options.
84+
/// </summary>
85+
/// <value>
86+
/// The <see cref="SerializationCompatibilityOptions"/> which stores compatibility options. This value will not be <c>null</c>.
87+
/// </value>
88+
SerializationCompatibilityOptions CompatibilityOptions { get; }
89+
90+
/// <summary>
91+
/// Gets or sets a value indicating whether generated serializers will override async methods or not.
92+
/// </summary>
93+
/// <value>
94+
/// <c>true</c> if generated serializers will override async methods; otherwise, <c>false</c>.
95+
/// Default is <c>true</c>.
96+
/// </value>
97+
bool WithAsync { get; set; }
98+
8299
/// <summary>
83100
/// Validates this instance state.
84101
/// </summary>

src/MsgPack/Serialization/SerializerAssemblyGenerationConfiguration.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,28 @@ public string Namespace
169169
}
170170
}
171171

172+
private readonly SerializationCompatibilityOptions _compatibilityOptions = new SerializationCompatibilityOptions();
173+
174+
/// <summary>
175+
/// Gets the compatibility options for generating serializers.
176+
/// </summary>
177+
/// <value>
178+
/// The <see cref="SerializationCompatibilityOptions"/> which stores compatibility options for generating serializers. This value will not be <c>null</c>.
179+
/// </value>
180+
public SerializationCompatibilityOptions CompatibilityOptions
181+
{
182+
get { return this._compatibilityOptions; }
183+
}
184+
185+
/// <summary>
186+
/// Gets or sets a value indicating whether generated serializers will override async methods or not.
187+
/// </summary>
188+
/// <value>
189+
/// <c>true</c> if generated serializers will override async methods; otherwise, <c>false</c>.
190+
/// Default is <c>true</c>.
191+
/// </value>
192+
public bool WithAsync { get; set; }
193+
172194
/// <summary>
173195
/// Initializes a new instance of the <see cref="SerializerAssemblyGenerationConfiguration"/> class.
174196
/// </summary>

src/MsgPack/Serialization/SerializerCodeGenerationConfiguration.cs

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
//
33
// MessagePack for CLI
44
//
5-
// Copyright (C) 2010-2015 FUJIWARA, Yusuke
5+
// Copyright (C) 2010-2016 FUJIWARA, Yusuke
66
//
77
// Licensed under the Apache License, Version 2.0 (the "License");
88
// you may not use this file except in compliance with the License.
@@ -214,6 +214,28 @@ public EnumSerializationMethod EnumSerializationMethod
214214
/// </remarks>
215215
public bool IsInternalToMsgPackLibrary { get; set; } // This is also convinience to Unittest -- which is intern with InternalsVisibleTo
216216

217+
private readonly SerializationCompatibilityOptions _compatibilityOptions = new SerializationCompatibilityOptions();
218+
219+
/// <summary>
220+
/// Gets the compatibility options for generating serializers.
221+
/// </summary>
222+
/// <value>
223+
/// The <see cref="SerializationCompatibilityOptions"/> which stores compatibility options for generating serializers. This value will not be <c>null</c>.
224+
/// </value>
225+
public SerializationCompatibilityOptions CompatibilityOptions
226+
{
227+
get { return this._compatibilityOptions; }
228+
}
229+
230+
/// <summary>
231+
/// Gets or sets a value indicating whether generated serializers will override async methods or not.
232+
/// </summary>
233+
/// <value>
234+
/// <c>true</c> if generated serializers will override async methods; otherwise, <c>false</c>.
235+
/// Default is <c>true</c>.
236+
/// </value>
237+
public bool WithAsync { get; set; }
238+
217239
/// <summary>
218240
/// Initializes a new instance of the <see cref="SerializerCodeGenerationConfiguration"/> class.
219241
/// </summary>

src/MsgPack/Serialization/SerializerGenerator.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -441,6 +441,13 @@ public IEnumerable<SerializerCodeGenerationResult> Generate( IEnumerable<Type> t
441441
SerializationMethod = configuration.SerializationMethod
442442
};
443443
context.SerializerOptions.EmitterFlavor = this.EmitterFlavor;
444+
context.CompatibilityOptions.AllowNonCollectionEnumerableTypes = configuration.CompatibilityOptions.AllowNonCollectionEnumerableTypes;
445+
context.CompatibilityOptions.IgnorePackabilityForCollection = configuration.CompatibilityOptions.IgnorePackabilityForCollection;
446+
context.CompatibilityOptions.OneBoundDataMemberOrder = configuration.CompatibilityOptions.OneBoundDataMemberOrder;
447+
context.CompatibilityOptions.PackerCompatibilityOptions = configuration.CompatibilityOptions.PackerCompatibilityOptions;
448+
#if !NETFX_35
449+
context.SerializerOptions.WithAsync = configuration.WithAsync;
450+
#endif // !NETFX_35
444451

445452
IEnumerable<Type> realTargetTypes;
446453
if ( configuration.IsRecursive )

src/mpu/Program.cs

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
//
33
// MessagePack for CLI
44
//
5-
// Copyright (C) 2014 FUJIWARA, Yusuke
5+
// Copyright (C) 2014-2016 FUJIWARA, Yusuke
66
//
77
// Licensed under the Apache License, Version 2.0 (the "License");
88
// you may not use this file except in compliance with the License.
@@ -27,6 +27,7 @@
2727

2828
using Mono.Options;
2929

30+
using MsgPack;
3031
using MsgPack.Serialization;
3132

3233
namespace mpu
@@ -144,6 +145,26 @@ private static int Execute( IEnumerable<string> args )
144145
"avoid-reflection-based", "[serializer, optional] Specify avoid built-in reflection based serializer and generates alternative serializers.",
145146
_ => configuration.PreferReflectionBasedSerializer = false
146147
},
148+
{
149+
"prohibit-non-collection-enumerable-types", "[serializer, optional] Specify prevent serializer generation for types which implemnent IEnumerable but do not have add for backward compatibility.",
150+
_ => configuration.CompatibilityOptions.AllowNonCollectionEnumerableTypes = false
151+
},
152+
{
153+
"ignore-packability-for-collection", "[serializer, optional] Specify generate normal collection serializer logic for types which implemnent IEnumerable and IPackable/IUnpackble/IAsyncPackable/IAsyncUnpackable for backward compatiblity.",
154+
_ => configuration.CompatibilityOptions.IgnorePackabilityForCollection = false
155+
},
156+
{
157+
"one-bound-data-member-order", "[serializer, optional] Specify generating serializers use 1-based DataMemberAttribute.order instead of 0-based for compatibility of some other serialization libraries.",
158+
_ => configuration.CompatibilityOptions.OneBoundDataMemberOrder = false
159+
},
160+
{
161+
"classic-packer", "[serializer, optional] Specify that packer does not emit new bin, str8, and ext types.",
162+
_ => configuration.CompatibilityOptions.PackerCompatibilityOptions = PackerCompatibilityOptions.Classic
163+
},
164+
{
165+
"with-async", "[serializer, optional] Specify generating async methods on serializers. This option causes compilation error for legacy environments including Unity.",
166+
_ => configuration.WithAsync = true
167+
},
147168
{
148169
"indent=", "[serializer, optional] Specify indent string for generated serializers. Default is a horizontal tab charactor (U+0009).",
149170
value => configuration.CodeIndentString = value
@@ -287,7 +308,7 @@ SerializerCodeGenerationConfiguration configuration
287308
),
288309
includingPattern,
289310
excludingPattern
290-
);
311+
);
291312
}
292313
else
293314
{
@@ -296,7 +317,7 @@ SerializerCodeGenerationConfiguration configuration
296317
sourceFilePathes[ 0 ],
297318
includingPattern,
298319
excludingPattern
299-
);
320+
);
300321
}
301322

302323
foreach ( var outputFilePath in result )

0 commit comments

Comments
 (0)