Skip to content

Commit 7b7ef31

Browse files
author
Michaël Catanzariti
authored
BREAKING CHANGE: Cbor options dependencies rework
1 parent d018f1b commit 7b7ef31

27 files changed

+114
-87
lines changed

src/Dahomey.Cbor.Tests/Helper.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public static T Read<T>(string hexBuffer, CborOptions options = null)
1616
{
1717
options = options ?? CborOptions.Default;
1818
Span<byte> buffer = hexBuffer.HexToBytes();
19-
CborReader reader = new CborReader(buffer, options);
19+
CborReader reader = new CborReader(buffer);
2020
ICborConverter<T> converter = options.Registry.ConverterRegistry.Lookup<T>();
2121
return converter.Read(ref reader);
2222
}
@@ -78,7 +78,7 @@ public static string Write<T>(T value, CborOptions options = null)
7878

7979
using (ByteBufferWriter bufferWriter = new ByteBufferWriter())
8080
{
81-
CborWriter writer = new CborWriter(bufferWriter, options);
81+
CborWriter writer = new CborWriter(bufferWriter);
8282
ICborConverter<T> converter = options.Registry.ConverterRegistry.Lookup<T>();
8383
converter.Write(ref writer, value);
8484
return BitConverter.ToString(bufferWriter.WrittenSpan.ToArray()).Replace("-", "");
@@ -134,7 +134,7 @@ public static void TestWrite<T>(T value, Type expectedExceptionType = null, Cbor
134134
public static T Read<T>(string methodName, string hexBuffer)
135135
{
136136
Span<byte> buffer = hexBuffer.HexToBytes();
137-
CborReader reader = new CborReader(buffer, null);
137+
CborReader reader = new CborReader(buffer);
138138
MethodInfo method = typeof(CborReader).GetMethod(methodName, new Type[0] { });
139139
return CreateMethodFunctor<CborReaderFunctor<T>>(method)(reader);
140140
}
@@ -168,24 +168,24 @@ public static void TestRead<T>(string methodName, string hexBuffer, T expectedVa
168168

169169
delegate void CborWriterFunctor<T>(CborWriter writer, T value);
170170

171-
public static string Write<T>(string methodName, T value, CborOptions options = null)
171+
public static string Write<T>(string methodName, T value)
172172
{
173173
using (ByteBufferWriter bufferWriter = new ByteBufferWriter())
174174
{
175-
CborWriter writer = new CborWriter(bufferWriter, options);
175+
CborWriter writer = new CborWriter(bufferWriter);
176176
MethodInfo method = typeof(CborWriter).GetMethod(methodName, new[] { typeof(T) });
177177
CreateMethodFunctor<CborWriterFunctor<T>>(method)(writer, value);
178178
return BitConverter.ToString(bufferWriter.WrittenSpan.ToArray()).Replace("-", "");
179179
}
180180
}
181181

182-
public static void TestWrite<T>(string methodName, T value, string hexBuffer, Type expectedExceptionType = null, CborOptions options = null)
182+
public static void TestWrite<T>(string methodName, T value, string hexBuffer, Type expectedExceptionType = null)
183183
{
184184
if (expectedExceptionType != null)
185185
{
186186
try
187187
{
188-
Write(methodName, value, options);
188+
Write(methodName, value);
189189
}
190190
catch (Exception ex)
191191
{
@@ -194,7 +194,7 @@ public static void TestWrite<T>(string methodName, T value, string hexBuffer, Ty
194194
}
195195
else
196196
{
197-
Assert.Equal(hexBuffer, Write(methodName, value, options));
197+
Assert.Equal(hexBuffer, Write(methodName, value));
198198
}
199199
}
200200

src/Dahomey.Cbor/Cbor.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ public static T Deserialize<T>(
147147
CborOptions? options = null)
148148
{
149149
options ??= CborOptions.Default;
150-
CborReader reader = new CborReader(buffer, options);
150+
CborReader reader = new CborReader(buffer);
151151
ICborConverter<T> converter = options.Registry.ConverterRegistry.Lookup<T>();
152152
return converter.Read(ref reader);
153153
}
@@ -159,7 +159,7 @@ public static T Deserialize<T>(
159159
CborOptions? options = null)
160160
{
161161
options ??= CborOptions.Default;
162-
CborReader reader = new CborReader(buffer, options);
162+
CborReader reader = new CborReader(buffer);
163163
ICborConverter cborConverter = options.Registry.ConverterRegistry.Lookup(objectType);
164164
return cborConverter.Read(ref reader);
165165
}
@@ -212,7 +212,7 @@ public static void Serialize<T>(
212212
CborOptions? options = null)
213213
{
214214
options ??= CborOptions.Default;
215-
CborWriter writer = new CborWriter(buffer, options);
215+
CborWriter writer = new CborWriter(buffer);
216216
ICborConverter<T> converter = options.Registry.ConverterRegistry.Lookup<T>();
217217
converter.Write(ref writer, input);
218218
}
@@ -225,7 +225,7 @@ public static void Serialize(
225225
CborOptions? options = null)
226226
{
227227
options ??= CborOptions.Default;
228-
CborWriter writer = new CborWriter(buffer, options);
228+
CborWriter writer = new CborWriter(buffer);
229229
ICborConverter converter = options.Registry.ConverterRegistry.Lookup(inputType);
230230
converter.Write(ref writer, input);
231231
}

src/Dahomey.Cbor/CborOptions.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,17 @@ public class CborOptions
3636
{
3737
public static CborOptions Default { get; } = new CborOptions();
3838

39-
public SerializationRegistry Registry { get; } = new SerializationRegistry();
39+
public SerializationRegistry Registry { get; private set; }
4040
public UnhandledNameMode UnhandledNameMode { get; set; }
4141
public ValueFormat EnumFormat { get; set; }
4242
public DateTimeFormat DateTimeFormat { get; set; }
4343
public CborDiscriminatorPolicy DiscriminatorPolicy { get; set; }
4444
public LengthMode ArrayLengthMode { get; set; } = LengthMode.DefiniteLength;
4545
public LengthMode MapLengthMode { get; set; } = LengthMode.DefiniteLength;
46+
47+
public CborOptions()
48+
{
49+
Registry = new SerializationRegistry(this);
50+
}
4651
}
4752
}

src/Dahomey.Cbor/Serialization/CborReader.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,13 +76,11 @@ public ref struct CborReader
7676
private CborReaderHeader _header;
7777
private int _remainingItemCount;
7878

79-
public CborOptions Options { get; }
8079
public ReadOnlySpan<byte> Buffer => _buffer;
8180

82-
public CborReader(ReadOnlySpan<byte> buffer, CborOptions? options = null)
81+
public CborReader(ReadOnlySpan<byte> buffer)
8382
{
8483
_buffer = buffer;
85-
Options = options ?? CborOptions.Default;
8684
_currentPos = 0;
8785
_state = CborReaderState.Start;
8886
_header = new CborReaderHeader();

src/Dahomey.Cbor/Serialization/CborWriter.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,11 @@ public ref struct CborWriter
2626

2727
private IBufferWriter<byte> _bufferWriter;
2828

29-
public CborOptions Options { get; }
3029
public IBufferWriter<byte> BufferWriter => _bufferWriter;
3130

32-
public CborWriter(IBufferWriter<byte> bufferWriter, CborOptions? options = null)
31+
public CborWriter(IBufferWriter<byte> bufferWriter)
3332
{
3433
_bufferWriter = bufferWriter;
35-
Options = options ?? CborOptions.Default;
3634
}
3735

3836
public void WriteSemanticTag(ulong semanticTag)

src/Dahomey.Cbor/Serialization/Converters/AbstractCollectionConverter.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,13 @@ public struct WriterContext
2121
public LengthMode lengthMode;
2222
}
2323

24+
private readonly CborOptions _options;
2425
private readonly ICborConverter<TI> _itemConverter;
2526

26-
public AbstractCollectionConverter(SerializationRegistry registry)
27+
public AbstractCollectionConverter(CborOptions options)
2728
{
28-
_itemConverter = registry.ConverterRegistry.Lookup<TI>();
29+
_options = options;
30+
_itemConverter = options.Registry.ConverterRegistry.Lookup<TI>();
2931
}
3032

3133
protected abstract ICollection<TI> InstantiateTempCollection();
@@ -57,7 +59,7 @@ public override void Write(ref CborWriter writer, TC value, LengthMode lengthMod
5759
count = value.Count(),
5860
enumerator = value.GetEnumerator(),
5961
lengthMode = lengthMode != LengthMode.Default
60-
? lengthMode : writer.Options.ArrayLengthMode
62+
? lengthMode : _options.ArrayLengthMode
6163
};
6264

6365
writer.WriteArray(this, ref context);

src/Dahomey.Cbor/Serialization/Converters/AbstractDictionaryConverter.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,18 @@ public struct WriterContext
2121
public LengthMode lengthMode;
2222
}
2323

24+
private readonly CborOptions _options;
2425
private readonly ICborConverter<TK> _keyConverter;
2526
private readonly ICborConverter<TV> _valueConverter;
2627

2728
protected abstract IDictionary<TK, TV> InstantiateTempCollection();
2829
protected abstract TC InstantiateCollection(IDictionary<TK, TV> tempCollection);
2930

30-
public AbstractDictionaryConverter(SerializationRegistry registry)
31+
public AbstractDictionaryConverter(CborOptions options)
3132
{
32-
_keyConverter = registry.ConverterRegistry.Lookup<TK>();
33-
_valueConverter = registry.ConverterRegistry.Lookup<TV>();
33+
_options = options;
34+
_keyConverter = options.Registry.ConverterRegistry.Lookup<TK>();
35+
_valueConverter = options.Registry.ConverterRegistry.Lookup<TV>();
3436
}
3537

3638
public override TC Read(ref CborReader reader)
@@ -58,7 +60,7 @@ public override void Write(ref CborWriter writer, TC value, LengthMode lengthMod
5860
count = value.Count,
5961
enumerator = value.GetEnumerator(),
6062
lengthMode = lengthMode != LengthMode.Default
61-
? lengthMode : writer.Options.MapLengthMode
63+
? lengthMode : _options.MapLengthMode
6264
};
6365

6466
writer.WriteMap(this, ref context);

src/Dahomey.Cbor/Serialization/Converters/ArrayConverter.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,13 @@ public struct WriterContext
2121
public LengthMode lengthMode;
2222
}
2323

24+
private readonly CborOptions _options;
2425
private readonly ICborConverter<TI> _itemConverter;
2526

26-
public ArrayConverter(SerializationRegistry registry)
27+
public ArrayConverter(CborOptions options)
2728
{
28-
_itemConverter = registry.ConverterRegistry.Lookup<TI>();
29+
_options = options;
30+
_itemConverter = options.Registry.ConverterRegistry.Lookup<TI>();
2931
}
3032

3133
public override TI[]? Read(ref CborReader reader)
@@ -60,7 +62,7 @@ public override void Write(ref CborWriter writer, TI[]? value, LengthMode length
6062
{
6163
array = value,
6264
lengthMode = lengthMode != LengthMode.Default
63-
? lengthMode : writer.Options.ArrayLengthMode
65+
? lengthMode : _options.ArrayLengthMode
6466
};
6567

6668
writer.WriteArray(this, ref context);

src/Dahomey.Cbor/Serialization/Converters/CborConverterRegistry.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@ namespace Dahomey.Cbor.Serialization.Converters
77
{
88
public class CborConverterRegistry
99
{
10-
private readonly SerializationRegistry _registry;
10+
private readonly CborOptions _options;
1111
private readonly ConcurrentDictionary<Type, ICborConverter> _converters = new ConcurrentDictionary<Type, ICborConverter>();
1212
private readonly ConcurrentStack<ICborConverterProvider> _providers = new ConcurrentStack<ICborConverterProvider>();
1313

14-
public CborConverterRegistry(SerializationRegistry registry)
14+
public CborConverterRegistry(CborOptions options)
1515
{
16-
_registry = registry;
16+
_options = options;
1717

1818
// order matters. It's in reverse order of how they'll get consumed
1919
RegisterConverterProvider(new ObjectConverterProvider());
@@ -91,7 +91,7 @@ public void Reset()
9191
private ICborConverter CreateConverter(Type type)
9292
{
9393
ICborConverter? converter = _providers
94-
.Select(provider => provider.GetConverter(type, _registry))
94+
.Select(provider => provider.GetConverter(type, _options))
9595
.FirstOrDefault(provider => provider != null);
9696

9797
if (converter == null)

src/Dahomey.Cbor/Serialization/Converters/CborValueConverter.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,13 @@ public struct ArrayWriterContext
3737
public LengthMode lengthMode;
3838
}
3939

40+
private readonly CborOptions _options;
41+
42+
public CborValueConverter(CborOptions options)
43+
{
44+
_options = options;
45+
}
46+
4047
public override CborValue Read(ref CborReader reader)
4148
{
4249
switch (reader.GetCurrentDataItemType())
@@ -224,7 +231,7 @@ bool ICborArrayWriter<ArrayWriterContext>.WriteArrayItem(ref CborWriter writer,
224231
obj = value,
225232
enumerator = value.GetEnumerator(),
226233
lengthMode = lengthMode != LengthMode.Default
227-
? lengthMode : writer.Options.MapLengthMode
234+
? lengthMode : _options.MapLengthMode
228235
};
229236
writer.WriteMap(this, ref mapWriterContext);
230237
}
@@ -264,7 +271,7 @@ bool ICborArrayWriter<ArrayWriterContext>.WriteArrayItem(ref CborWriter writer,
264271
{
265272
array = value,
266273
lengthMode = lengthMode != LengthMode.Default
267-
? lengthMode : writer.Options.ArrayLengthMode
274+
? lengthMode : _options.ArrayLengthMode
268275
};
269276
writer.WriteArray(this, ref arrayWriterContext);
270277
}

0 commit comments

Comments
 (0)