Skip to content

Commit 88422df

Browse files
committed
Add explicit capabilities for built in serializer types.
1 parent 9212817 commit 88422df

74 files changed

Lines changed: 397 additions & 145 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

src/MsgPack.Unity.Full/Serialization/NonGenericMessagePackSerializer.cs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,26 +40,27 @@ protected Type TargetType
4040
/// </summary>
4141
/// <param name="ownerContext">A <see cref="SerializationContext"/> which owns this serializer.</param>
4242
/// <param name="targetType">The type to be serialized.</param>
43+
/// <param name="capabilities">The capability flags for this instance.</param>
4344
/// <exception cref="ArgumentNullException"><paramref name="ownerContext"/> is <c>null</c>.</exception>
44-
protected NonGenericMessagePackSerializer( SerializationContext ownerContext, Type targetType )
45-
: this( ownerContext, targetType, null ) { }
45+
protected NonGenericMessagePackSerializer( SerializationContext ownerContext, Type targetType, SerializerCapabilities capabilities )
46+
: this( ownerContext, targetType, null, capabilities ) { }
4647

4748
/// <summary>
4849
/// Initializes a new instance of the <see cref="NonGenericMessagePackSerializer"/> class with explicitly specified compatibility option.
4950
/// </summary>
5051
/// <param name="ownerContext">A <see cref="SerializationContext"/> which owns this serializer.</param>
5152
/// <param name="targetType">The type to be serialized.</param>
5253
/// <param name="packerCompatibilityOptions">The <see cref="PackerCompatibilityOptions"/> for new packer creation.</param>
54+
/// <param name="capabilities">The capability flags for this instance.</param>
5355
/// <exception cref="ArgumentNullException"><paramref name="ownerContext"/> is <c>null</c>.</exception>
5456
/// <remarks>
5557
/// This method also supports backword compatibility with 0.4.
5658
/// </remarks>
57-
protected NonGenericMessagePackSerializer( SerializationContext ownerContext, Type targetType, PackerCompatibilityOptions packerCompatibilityOptions )
58-
: this( ownerContext, targetType, new PackerCompatibilityOptions?( packerCompatibilityOptions ) ) { }
59+
protected NonGenericMessagePackSerializer( SerializationContext ownerContext, Type targetType, PackerCompatibilityOptions packerCompatibilityOptions, SerializerCapabilities capabilities )
60+
: this( ownerContext, targetType, new PackerCompatibilityOptions?( packerCompatibilityOptions ), capabilities ) { }
5961

60-
private NonGenericMessagePackSerializer( SerializationContext ownerContext, Type targetType, PackerCompatibilityOptions? packerCompatibilityOptions )
61-
#warning TODO: capabilities from derived class
62-
: base( ownerContext, packerCompatibilityOptions, SerializerCapabilities.PackTo | SerializerCapabilities.UnpackFrom | SerializerCapabilities.UnpackTo )
62+
private NonGenericMessagePackSerializer( SerializationContext ownerContext, Type targetType, PackerCompatibilityOptions? packerCompatibilityOptions, SerializerCapabilities capabilities )
63+
: base( ownerContext, packerCompatibilityOptions, capabilities )
6364
{
6465
this._targetType = targetType;
6566
this._isNullable = JudgeNullable( targetType );

src/MsgPack/Serialization/CollectionSerializers/CollectionMessagePackSerializerBase`2.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,21 @@ public abstract class CollectionMessagePackSerializerBase<TCollection, TItem> :
5555
protected CollectionMessagePackSerializerBase( SerializationContext ownerContext, PolymorphismSchema schema )
5656
: base( ownerContext, schema ) { }
5757

58+
/// <summary>
59+
/// Initializes a new instance of the <see cref="CollectionMessagePackSerializerBase{TCollection, TItem}"/> class.
60+
/// </summary>
61+
/// <param name="ownerContext">A <see cref="SerializationContext"/> which owns this serializer.</param>
62+
/// <param name="schema">
63+
/// The schema for collection itself or its items for the member this instance will be used to.
64+
/// <c>null</c> will be considered as <see cref="PolymorphismSchema.Default"/>.
65+
/// </param>
66+
/// <param name="capabilities">A serializer calability flags represents capabilities of this instance.</param>
67+
/// <exception cref="ArgumentNullException">
68+
/// <paramref name="ownerContext"/> is <c>null</c>.
69+
/// </exception>
70+
protected CollectionMessagePackSerializerBase( SerializationContext ownerContext, PolymorphismSchema schema, SerializerCapabilities capabilities )
71+
: base( ownerContext, schema, capabilities ) { }
72+
5873
/// <summary>
5974
/// Serializes specified object with specified <see cref="Packer"/>.
6075
/// </summary>

src/MsgPack/Serialization/CollectionSerializers/CollectionMessagePackSerializer`2.cs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,21 @@ public abstract class CollectionMessagePackSerializer<TCollection, TItem> : Coll
5454
protected CollectionMessagePackSerializer( SerializationContext ownerContext, PolymorphismSchema schema )
5555
: base( ownerContext, schema ) { }
5656

57+
/// <summary>
58+
/// Initializes a new instance of the <see cref="CollectionMessagePackSerializer{TCollection, TItem}"/> class.
59+
/// </summary>
60+
/// <param name="ownerContext">A <see cref="SerializationContext"/> which owns this serializer.</param>
61+
/// <param name="schema">
62+
/// The schema for collection itself or its items for the member this instance will be used to.
63+
/// <c>null</c> will be considered as <see cref="PolymorphismSchema.Default"/>.
64+
/// </param>
65+
/// <param name="capabilities">A serializer calability flags represents capabilities of this instance.</param>
66+
/// <exception cref="ArgumentNullException">
67+
/// <paramref name="ownerContext"/> is <c>null</c>.
68+
/// </exception>
69+
protected CollectionMessagePackSerializer( SerializationContext ownerContext, PolymorphismSchema schema, SerializerCapabilities capabilities )
70+
: base( ownerContext, schema, capabilities ) { }
71+
5772
/// <summary>
5873
/// Returns count of the collection.
5974
/// </summary>
@@ -100,9 +115,10 @@ protected UnityCollectionMessagePackSerializer(
100115
SerializationContext ownerContext,
101116
Type targetType,
102117
CollectionTraits traits,
103-
PolymorphismSchema schema
118+
PolymorphismSchema schema,
119+
SerializerCapabilities capabilities
104120
)
105-
: base( ownerContext, targetType, traits.ElementType, schema )
121+
: base( ownerContext, targetType, traits.ElementType, schema, capabilities )
106122
{
107123
this._getCount = traits.CountPropertyGetter;
108124
this._add = traits.AddMethod;

src/MsgPack/Serialization/CollectionSerializers/DictionaryMessagePackSerializerBase`3.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,27 @@ protected DictionaryMessagePackSerializerBase( SerializationContext ownerContext
6969
this._valueSerializer = ownerContext.GetSerializer<TValue>( safeSchema.ItemSchema );
7070
}
7171

72+
/// <summary>
73+
/// Initializes a new instance of the <see cref="DictionaryMessagePackSerializerBase{TDictionary, TKey, TValue}"/> class.
74+
/// </summary>
75+
/// <param name="ownerContext">A <see cref="SerializationContext"/> which owns this serializer.</param>
76+
/// <param name="schema">
77+
/// The schema for collection itself or its items for the member this instance will be used to.
78+
/// <c>null</c> will be considered as <see cref="PolymorphismSchema.Default"/>.
79+
/// </param>
80+
/// <param name="capabilities">A serializer calability flags represents capabilities of this instance.</param>
81+
/// <exception cref="ArgumentNullException">
82+
/// <paramref name="ownerContext"/> is <c>null</c>.
83+
/// </exception>
84+
[System.Diagnostics.CodeAnalysis.SuppressMessage( "Microsoft.Design", "CA1062:ValidateArgumentsOfPublicMethods", MessageId = "0", Justification = "Validated by base .ctor" )]
85+
protected DictionaryMessagePackSerializerBase( SerializationContext ownerContext, PolymorphismSchema schema, SerializerCapabilities capabilities )
86+
: base( ownerContext, capabilities )
87+
{
88+
var safeSchema = schema ?? PolymorphismSchema.Default;
89+
this._keySerializer = ownerContext.GetSerializer<TKey>( safeSchema.KeySchema );
90+
this._valueSerializer = ownerContext.GetSerializer<TValue>( safeSchema.ItemSchema );
91+
}
92+
7293
/// <summary>
7394
/// Serializes specified object with specified <see cref="Packer"/>.
7495
/// </summary>

src/MsgPack/Serialization/CollectionSerializers/DictionaryMessagePackSerializer`3.cs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,21 @@ public abstract class DictionaryMessagePackSerializer<TDictionary, TKey, TValue>
6161
protected DictionaryMessagePackSerializer( SerializationContext ownerContext, PolymorphismSchema schema )
6262
: base( ownerContext, schema ) { }
6363

64+
/// <summary>
65+
/// Initializes a new instance of the <see cref="DictionaryMessagePackSerializer{TDictionary, TKey, TValue}"/> class.
66+
/// </summary>
67+
/// <param name="ownerContext">A <see cref="SerializationContext"/> which owns this serializer.</param>
68+
/// <param name="schema">
69+
/// The schema for collection itself or its items for the member this instance will be used to.
70+
/// <c>null</c> will be considered as <see cref="PolymorphismSchema.Default"/>.
71+
/// </param>
72+
/// <param name="capabilities">A serializer calability flags represents capabilities of this instance.</param>
73+
/// <exception cref="ArgumentNullException">
74+
/// <paramref name="ownerContext"/> is <c>null</c>.
75+
/// </exception>
76+
protected DictionaryMessagePackSerializer( SerializationContext ownerContext, PolymorphismSchema schema, SerializerCapabilities capabilities )
77+
: base( ownerContext, schema, capabilities ) { }
78+
6479
/// <summary>
6580
/// Returns count of the dictionary.
6681
/// </summary>
@@ -117,9 +132,10 @@ protected UnityDictionaryMessagePackSerializer(
117132
Type keyType,
118133
Type valueType,
119134
CollectionTraits traits,
120-
PolymorphismSchema schema
135+
PolymorphismSchema schema,
136+
SerializerCapabilities capabilities
121137
)
122-
: base( ownerContext, targetType )
138+
: base( ownerContext, targetType, capabilities )
123139
{
124140
var safeSchema = schema ?? PolymorphismSchema.Default;
125141
this._keySerializer = ownerContext.GetSerializer( keyType, safeSchema.KeySchema );

src/MsgPack/Serialization/CollectionSerializers/EnumerableMessagePackSerializerBase`2.cs

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,25 @@ protected EnumerableMessagePackSerializerBase( SerializationContext ownerContext
6666
this._itemSerializer = ownerContext.GetSerializer<TItem>( ( schema ?? PolymorphismSchema.Default ).ItemSchema );
6767
}
6868

69+
/// <summary>
70+
/// Initializes a new instance of the <see cref="EnumerableMessagePackSerializerBase{TCollection, TItem}"/> class.
71+
/// </summary>
72+
/// <param name="ownerContext">A <see cref="SerializationContext"/> which owns this serializer.</param>
73+
/// <param name="schema">
74+
/// The schema for collection itself or its items for the member this instance will be used to.
75+
/// <c>null</c> will be considered as <see cref="PolymorphismSchema.Default"/>.
76+
/// </param>
77+
/// <param name="capabilities">A serializer calability flags represents capabilities of this instance.</param>
78+
/// <exception cref="ArgumentNullException">
79+
/// <paramref name="ownerContext"/> is <c>null</c>.
80+
/// </exception>
81+
[System.Diagnostics.CodeAnalysis.SuppressMessage( "Microsoft.Design", "CA1062:ValidateArgumentsOfPublicMethods", MessageId = "0", Justification = "Validated by base .ctor" )]
82+
protected EnumerableMessagePackSerializerBase( SerializationContext ownerContext, PolymorphismSchema schema, SerializerCapabilities capabilities )
83+
: base( ownerContext, capabilities )
84+
{
85+
this._itemSerializer = ownerContext.GetSerializer<TItem>( ( schema ?? PolymorphismSchema.Default ).ItemSchema );
86+
}
87+
6988
/// <summary>
7089
/// Creates a new collection instance with specified initial capacity.
7190
/// </summary>
@@ -255,8 +274,8 @@ internal abstract class UnityEnumerableMessagePackSerializerBase : NonGenericMes
255274
internal MessagePackSerializer ItemSerializer { get { return this._itemSerializer; } }
256275

257276
[System.Diagnostics.CodeAnalysis.SuppressMessage( "Microsoft.Design", "CA1062:ValidateArgumentsOfPublicMethods", MessageId = "0", Justification = "Validated by base .ctor" )]
258-
protected UnityEnumerableMessagePackSerializerBase( SerializationContext ownerContext, Type targetType, Type itemType, PolymorphismSchema schema )
259-
: base( ownerContext, targetType )
277+
protected UnityEnumerableMessagePackSerializerBase( SerializationContext ownerContext, Type targetType, Type itemType, PolymorphismSchema schema, SerializerCapabilities capabilities )
278+
: base( ownerContext, targetType, capabilities )
260279
{
261280
this._itemSerializer = ownerContext.GetSerializer( itemType, ( schema ?? PolymorphismSchema.Default ).ItemSchema );
262281
}

src/MsgPack/Serialization/CollectionSerializers/EnumerableMessagePackSerializer`2.cs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,21 @@ public abstract class EnumerableMessagePackSerializer<TCollection, TItem> : Enum
6262
protected EnumerableMessagePackSerializer( SerializationContext ownerContext, PolymorphismSchema schema )
6363
: base( ownerContext, schema ) { }
6464

65+
/// <summary>
66+
/// Initializes a new instance of the <see cref="EnumerableMessagePackSerializer{TCollection, TItem}"/> class.
67+
/// </summary>
68+
/// <param name="ownerContext">A <see cref="SerializationContext"/> which owns this serializer.</param>
69+
/// <param name="schema">
70+
/// The schema for collection itself or its items for the member this instance will be used to.
71+
/// <c>null</c> will be considered as <see cref="PolymorphismSchema.Default"/>.
72+
/// </param>
73+
/// <param name="capabilities">A serializer calability flags represents capabilities of this instance.</param>
74+
/// <exception cref="ArgumentNullException">
75+
/// <paramref name="ownerContext"/> is <c>null</c>.
76+
/// </exception>
77+
protected EnumerableMessagePackSerializer( SerializationContext ownerContext, PolymorphismSchema schema, SerializerCapabilities capabilities )
78+
: base( ownerContext, schema, capabilities ) { }
79+
6580
/// <summary>
6681
/// Serializes specified object with specified <see cref="Packer"/>.
6782
/// </summary>
@@ -135,9 +150,10 @@ protected UnityEnumerableMessagePackSerializer(
135150
SerializationContext ownerContext,
136151
Type targetType,
137152
CollectionTraits traits,
138-
PolymorphismSchema schema
153+
PolymorphismSchema schema,
154+
SerializerCapabilities capabilities
139155
)
140-
: base( ownerContext, targetType, traits.ElementType, schema )
156+
: base( ownerContext, targetType, traits.ElementType, schema, capabilities )
141157
{
142158
this._getCount = traits.CountPropertyGetter;
143159
}

src/MsgPack/Serialization/CollectionSerializers/NonGenericCollectionMessagePackSerializer`1.cs

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,21 @@ public abstract class NonGenericCollectionMessagePackSerializer<TCollection> : N
5454
protected NonGenericCollectionMessagePackSerializer( SerializationContext ownerContext, PolymorphismSchema schema )
5555
: base( ownerContext, schema ) { }
5656

57+
/// <summary>
58+
/// Initializes a new instance of the <see cref="NonGenericCollectionMessagePackSerializer{TCollection}"/> class.
59+
/// </summary>
60+
/// <param name="ownerContext">A <see cref="SerializationContext"/> which owns this serializer.</param>
61+
/// <param name="schema">
62+
/// The schema for collection itself or its items for the member this instance will be used to.
63+
/// <c>null</c> will be considered as <see cref="PolymorphismSchema.Default"/>.
64+
/// </param>
65+
/// <param name="capabilities">A serializer calability flags represents capabilities of this instance.</param>
66+
/// <exception cref="ArgumentNullException">
67+
/// <paramref name="ownerContext"/> is <c>null</c>.
68+
/// </exception>
69+
protected NonGenericCollectionMessagePackSerializer( SerializationContext ownerContext, PolymorphismSchema schema, SerializerCapabilities capabilities )
70+
: base( ownerContext, schema, capabilities ) { }
71+
5772
/// <summary>
5873
/// Serializes specified object with specified <see cref="Packer"/>.
5974
/// </summary>
@@ -110,8 +125,8 @@ protected internal override async Task PackToAsyncCore( Packer packer, TCollecti
110125
#warning TODO: Remove if possible for maintenancibility.
111126
internal abstract class UnityNonGenericCollectionMessagePackSerializer : UnityNonGenericEnumerableMessagePackSerializerBase
112127
{
113-
protected UnityNonGenericCollectionMessagePackSerializer( SerializationContext ownerContext, Type targetType, PolymorphismSchema schema )
114-
: base( ownerContext, targetType, schema ) { }
128+
protected UnityNonGenericCollectionMessagePackSerializer( SerializationContext ownerContext, Type targetType, PolymorphismSchema schema, SerializerCapabilities capabilities )
129+
: base( ownerContext, targetType, schema, capabilities ) { }
115130

116131
protected internal override void PackToCore( Packer packer, object objectTree )
117132
{

src/MsgPack/Serialization/CollectionSerializers/NonGenericDictionaryMessagePackSerializer`1.cs

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,27 @@ protected NonGenericDictionaryMessagePackSerializer( SerializationContext ownerC
6666
this._valueSerializer = ownerContext.GetSerializer( typeof( object ), safeSchema.ItemSchema );
6767
}
6868

69+
/// <summary>
70+
/// Initializes a new instance of the <see cref="NonGenericDictionaryMessagePackSerializer{TDictionary}"/> class.
71+
/// </summary>
72+
/// <param name="ownerContext">A <see cref="SerializationContext"/> which owns this serializer.</param>
73+
/// <param name="schema">
74+
/// The schema for collection itself or its items for the member this instance will be used to.
75+
/// <c>null</c> will be considered as <see cref="PolymorphismSchema.Default"/>.
76+
/// </param>
77+
/// <param name="capabilities">A serializer calability flags represents capabilities of this instance.</param>
78+
/// <exception cref="ArgumentNullException">
79+
/// <paramref name="ownerContext"/> is <c>null</c>.
80+
/// </exception>
81+
[System.Diagnostics.CodeAnalysis.SuppressMessage( "Microsoft.Design", "CA1062:ValidateArgumentsOfPublicMethods", MessageId = "0", Justification = "Validated by base .ctor" )]
82+
protected NonGenericDictionaryMessagePackSerializer( SerializationContext ownerContext, PolymorphismSchema schema, SerializerCapabilities capabilities )
83+
: base( ownerContext, capabilities )
84+
{
85+
var safeSchema = schema ?? PolymorphismSchema.Default;
86+
this._keySerializer = ownerContext.GetSerializer( typeof( object ), safeSchema.KeySchema );
87+
this._valueSerializer = ownerContext.GetSerializer( typeof( object ), safeSchema.ItemSchema );
88+
}
89+
6990
/// <summary>
7091
/// Serializes specified object with specified <see cref="Packer"/>.
7192
/// </summary>
@@ -381,8 +402,8 @@ internal abstract class UnityNonGenericDictionaryMessagePackSerializer : NonGene
381402
private readonly MessagePackSerializer _keySerializer;
382403
private readonly MessagePackSerializer _valueSerializer;
383404

384-
protected UnityNonGenericDictionaryMessagePackSerializer( SerializationContext ownerContext, Type targetType, PolymorphismSchema schema )
385-
: base( ownerContext, targetType )
405+
protected UnityNonGenericDictionaryMessagePackSerializer( SerializationContext ownerContext, Type targetType, PolymorphismSchema schema, SerializerCapabilities capabilities )
406+
: base( ownerContext, targetType, capabilities )
386407
{
387408
var safeSchema = schema ?? PolymorphismSchema.Default;
388409
this._keySerializer = ownerContext.GetSerializer( typeof( object ), safeSchema.KeySchema );

src/MsgPack/Serialization/CollectionSerializers/NonGenericEnumerableMessagePackSerializerBase`1.cs

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,25 @@ protected NonGenericEnumerableMessagePackSerializerBase( SerializationContext ow
6565
this._itemSerializer = ownerContext.GetSerializer( typeof( object ), ( schema ?? PolymorphismSchema.Default ).ItemSchema );
6666
}
6767

68+
/// <summary>
69+
/// Initializes a new instance of the <see cref="NonGenericEnumerableMessagePackSerializerBase{TCollection}"/> class.
70+
/// </summary>
71+
/// <param name="ownerContext">A <see cref="SerializationContext"/> which owns this serializer.</param>
72+
/// <param name="schema">
73+
/// The schema for collection itself or its items for the member this instance will be used to.
74+
/// <c>null</c> will be considered as <see cref="PolymorphismSchema.Default"/>.
75+
/// </param>
76+
/// <param name="capabilities">A serializer calability flags represents capabilities of this instance.</param>
77+
/// <exception cref="ArgumentNullException">
78+
/// <paramref name="ownerContext"/> is <c>null</c>.
79+
/// </exception>
80+
[System.Diagnostics.CodeAnalysis.SuppressMessage( "Microsoft.Design", "CA1062:ValidateArgumentsOfPublicMethods", MessageId = "0", Justification = "Validated by base .ctor" )]
81+
protected NonGenericEnumerableMessagePackSerializerBase( SerializationContext ownerContext, PolymorphismSchema schema, SerializerCapabilities capabilities )
82+
: base( ownerContext, capabilities )
83+
{
84+
this._itemSerializer = ownerContext.GetSerializer( typeof( object ), ( schema ?? PolymorphismSchema.Default ).ItemSchema );
85+
}
86+
6887
/// <summary>
6988
/// Creates a new collection instance with specified initial capacity.
7089
/// </summary>
@@ -254,8 +273,8 @@ internal abstract class UnityNonGenericEnumerableMessagePackSerializerBase : Non
254273

255274
internal MessagePackSerializer ItemSerializer { get { return this._itemSerializer; } }
256275

257-
protected UnityNonGenericEnumerableMessagePackSerializerBase( SerializationContext ownerContext, Type targetType, PolymorphismSchema schema )
258-
: base( ownerContext, targetType )
276+
protected UnityNonGenericEnumerableMessagePackSerializerBase( SerializationContext ownerContext, Type targetType, PolymorphismSchema schema, SerializerCapabilities capabilities )
277+
: base( ownerContext, targetType, capabilities )
259278
{
260279
this._itemSerializer = ownerContext.GetSerializer( typeof( object ), ( schema ?? PolymorphismSchema.Default ).ItemSchema );
261280
}

0 commit comments

Comments
 (0)