Skip to content

Commit 0f9b260

Browse files
committed
Managing possible null on redisvalue implicit operator
1 parent 79ca503 commit 0f9b260

File tree

18 files changed

+80
-64
lines changed

18 files changed

+80
-64
lines changed

src/core/StackExchange.Redis.Extensions.Core/ISerializer.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,5 @@ public interface ISerializer
2222
/// <returns>
2323
/// The instance of the specified Item
2424
/// </returns>
25-
T? Deserialize<T>(byte[] serializedObject);
25+
T? Deserialize<T>(byte[]? serializedObject);
2626
}

src/core/StackExchange.Redis.Extensions.Core/Implementations/RedisClientFactory.cs

+1-3
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,8 @@ public RedisClientFactory(IEnumerable<RedisConfiguration> configurations, ILogge
5959
defaultConnectionName = configuration.Name;
6060
}
6161

62-
if (hashSet.Contains(configuration.Name!))
62+
if (!hashSet.Add(configuration.Name))
6363
throw new ArgumentException($"{nameof(RedisConfiguration.Name)} must be unique");
64-
65-
hashSet.Add(configuration.Name!);
6664
}
6765

6866
if (!hasDefaultConfigured)

src/core/StackExchange.Redis.Extensions.Core/Implementations/RedisDatabase.Hash.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public Task<bool> HashExistsAsync(string hashKey, string key, CommandFlags flag
4242
{
4343
var redisValue = await Database.HashGetAsync(hashKey, key, flag).ConfigureAwait(false);
4444

45-
return redisValue.HasValue ? Serializer.Deserialize<T>(redisValue!) : default;
45+
return redisValue.HasValue ? Serializer.Deserialize<T>(redisValue) : default;
4646
}
4747

4848
/// <inheritdoc/>
@@ -126,7 +126,7 @@ await Parallel.ForEachAsync(keys, async (key, _) =>
126126
return (await Database.HashGetAllAsync(hashKey, flag).ConfigureAwait(false))
127127
.ToDictionary(
128128
x => x.Name.ToString(),
129-
x => Serializer.Deserialize<T>(x.Value!),
129+
x => Serializer.Deserialize<T>(x.Value),
130130
StringComparer.Ordinal);
131131
}
132132

@@ -177,12 +177,12 @@ public Task HashSetAsync<T>(string hashKey, IDictionary<string, T> values, Comma
177177
{
178178
return (await Database.HashValuesAsync(hashKey, flag)
179179
.ConfigureAwait(false))
180-
.ToFastArray(x => Serializer.Deserialize<T>(x!));
180+
.ToFastArray(x => Serializer.Deserialize<T>(x));
181181
}
182182

183183
/// <inheritdoc/>
184184
public Dictionary<string, T?> HashScan<T>(string hashKey, string pattern, int pageSize = 10, CommandFlags flag = CommandFlags.None)
185185
{
186-
return Database.HashScan(hashKey, pattern, pageSize, flag).ToDictionary(x => x.Name.ToString(), x => Serializer.Deserialize<T>(x.Value!), StringComparer.Ordinal);
186+
return Database.HashScan(hashKey, pattern, pageSize, flag).ToDictionary(x => x.Name.ToString(), x => Serializer.Deserialize<T>(x.Value), StringComparer.Ordinal);
187187
}
188188
}

src/core/StackExchange.Redis.Extensions.Core/Implementations/RedisDatabase.List.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,6 @@ public Task<long> ListAddToLeftAsync<T>(string key, T[] items, CommandFlags flag
5050

5151
return item == RedisValue.Null
5252
? default
53-
: Serializer.Deserialize<T>(item!);
53+
: Serializer.Deserialize<T>(item);
5454
}
5555
}

src/core/StackExchange.Redis.Extensions.Core/Implementations/RedisDatabase.PubSub.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public Task SubscribeAsync<T>(RedisChannel channel, Func<T?, Task> handler, Comm
2828
return sub.SubscribeAsync(channel, Handler, flag);
2929

3030
void Handler(RedisChannel redisChannel, RedisValue value) =>
31-
_ = handler(Serializer.Deserialize<T>(value!)).ConfigureAwait(false);
31+
_ = handler(Serializer.Deserialize<T>(value)).ConfigureAwait(false);
3232
}
3333

3434
/// <inheritdoc/>
@@ -38,7 +38,7 @@ public Task UnsubscribeAsync<T>(RedisChannel channel, Func<T?, Task> handler, Co
3838
throw new ArgumentNullException(nameof(handler));
3939

4040
var sub = connectionPoolManager.GetConnection().GetSubscriber();
41-
return sub.UnsubscribeAsync(channel, (_, value) => handler(Serializer.Deserialize<T>(value!)), flag);
41+
return sub.UnsubscribeAsync(channel, (_, value) => handler(Serializer.Deserialize<T>(value)), flag);
4242
}
4343

4444
/// <inheritdoc/>

src/core/StackExchange.Redis.Extensions.Core/Implementations/RedisDatabase.Sort.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public Task<bool> SortedSetRemoveAsync<T>(
4747
{
4848
var result = await Database.SortedSetRangeByScoreAsync(key, start, stop, exclude, order, skip, take, flag).ConfigureAwait(false);
4949

50-
return result.Select(m => m == RedisValue.Null ? default : Serializer.Deserialize<T>(m!));
50+
return result.Select(m => m == RedisValue.Null ? default : Serializer.Deserialize<T>(m));
5151
}
5252

5353
/// <inheritdoc/>
@@ -60,6 +60,6 @@ public async Task<IEnumerable<ScoreRankResult<T>>> SortedSetRangeByRankWithScore
6060
{
6161
var result = await Database.SortedSetRangeByRankWithScoresAsync(key, start, stop, order, commandFlags).ConfigureAwait(false);
6262

63-
return result.ToFastArray(x => new ScoreRankResult<T>(Serializer.Deserialize<T>(x.Element!), x.Score));
63+
return result.ToFastArray(x => new ScoreRankResult<T>(Serializer.Deserialize<T>(x.Element), x.Score));
6464
}
6565
}

src/core/StackExchange.Redis.Extensions.Core/Implementations/RedisDatabase.cs

+5-5
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ public Task<long> RemoveAllAsync(string[] keys, CommandFlags flag = CommandFlags
9797

9898
return !valueBytes.HasValue
9999
? default
100-
: Serializer.Deserialize<T>(valueBytes!);
100+
: Serializer.Deserialize<T>(valueBytes);
101101
}
102102

103103
/// <inheritdoc/>
@@ -189,7 +189,7 @@ public Task<bool> ReplaceAsync<T>(string key, T value, TimeSpan expiresIn, When
189189
var value = result[index];
190190
dict.Add(redisKeys[index]!, value == RedisValue.Null
191191
? default
192-
: Serializer.Deserialize<T>(value!));
192+
: Serializer.Deserialize<T>(value));
193193
}
194194

195195
return dict;
@@ -286,7 +286,7 @@ public Task<bool> SetAddAsync<T>(string key, T item, CommandFlags flag = Command
286286

287287
return item == RedisValue.Null
288288
? default
289-
: Serializer.Deserialize<T>(item!);
289+
: Serializer.Deserialize<T>(item);
290290
}
291291

292292
/// <inheritdoc/>
@@ -297,7 +297,7 @@ public Task<bool> SetAddAsync<T>(string key, T item, CommandFlags flag = Command
297297

298298
var items = await Database.SetPopAsync(key, count, flag).ConfigureAwait(false);
299299

300-
return items.Select(item => item == RedisValue.Null ? default : Serializer.Deserialize<T>(item!));
300+
return items.Select(item => item == RedisValue.Null ? default : Serializer.Deserialize<T>(item));
301301
}
302302

303303
/// <inheritdoc/>
@@ -382,7 +382,7 @@ public async Task<T[]> SetMembersAsync<T>(string key, CommandFlags flag = Comman
382382
if (members.Length == 0)
383383
return [];
384384

385-
return members.ToFastArray(m => Serializer.Deserialize<T>(m!)!);
385+
return members.ToFastArray(m => Serializer.Deserialize<T>(m)!);
386386
}
387387

388388
/// <inheritdoc/>

src/serializers/StackExchange.Redis.Extensions.MemoryPack/MemoryPackSerializer.cs

+4-1
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,11 @@ public byte[] Serialize<T>(T? item)
1818
}
1919

2020
/// <inheritdoc/>
21-
public T? Deserialize<T>(byte[] serializedObject)
21+
public T? Deserialize<T>(byte[]? serializedObject)
2222
{
23+
if (serializedObject == null)
24+
return default;
25+
2326
return global::MemoryPack.MemoryPackSerializer.Deserialize<T>(serializedObject);
2427
}
2528
}

src/serializers/StackExchange.Redis.Extensions.MsgPack/MsgPackObjectSerializer.cs

+4-1
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,11 @@ public MsgPackObjectSerializer(Action<SerializerRepository>? customSerializerReg
3939
}
4040

4141
/// <inheritdoc/>
42-
public T? Deserialize<T>(byte[] serializedObject)
42+
public T? Deserialize<T>(byte[]? serializedObject)
4343
{
44+
if (serializedObject == null)
45+
return default;
46+
4447
if (typeof(T) == typeof(string))
4548
return (T)Convert.ChangeType(encoding.GetString(serializedObject), typeof(T), CultureInfo.InvariantCulture);
4649

src/serializers/StackExchange.Redis.Extensions.Newtonsoft/NewtonsoftSerializer.cs

+5-2
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public class NewtonsoftSerializer(JsonSerializerSettings? settings) : ISerialize
3232
/// Initializes a new instance of the <see cref="NewtonsoftSerializer"/> class.
3333
/// </summary>
3434
public NewtonsoftSerializer()
35-
: this(default)
35+
: this(null)
3636
{
3737
}
3838

@@ -48,8 +48,11 @@ public byte[] Serialize<T>(T? item)
4848
}
4949

5050
/// <inheritdoc/>
51-
public T? Deserialize<T>(byte[] serializedObject)
51+
public T? Deserialize<T>(byte[]? serializedObject)
5252
{
53+
if (serializedObject == null)
54+
return default;
55+
5356
var jsonString = encoding.GetString(serializedObject);
5457
return JsonConvert.DeserializeObject<T>(jsonString, settings)!;
5558
}

src/serializers/StackExchange.Redis.Extensions.Protobuf/ProtobufSerializer.cs

+4-1
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,11 @@ public byte[] Serialize<T>(T? item)
2727
}
2828

2929
/// <inheritdoc/>
30-
public T? Deserialize<T>(byte[] serializedObject)
30+
public T? Deserialize<T>(byte[]? serializedObject)
3131
{
32+
if (serializedObject == null)
33+
return default;
34+
3235
using var ms = new MemoryStream(serializedObject);
3336

3437
return Serializer.Deserialize<T>(ms);

src/serializers/StackExchange.Redis.Extensions.ServiceStack/ServiceStackJsonSerializer.cs

+4-1
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,11 @@ public ServiceStackJsonSerializer()
2929
}
3030

3131
/// <inheritdoc/>
32-
public T Deserialize<T>(byte[] serializedObject)
32+
public T? Deserialize<T>(byte[]? serializedObject)
3333
{
34+
if (serializedObject == null)
35+
return default;
36+
3437
var json = JsConfig.UTF8Encoding.GetString(serializedObject);
3538
return JsonSerializer.DeserializeFromString<T>(json);
3639
}

src/serializers/StackExchange.Redis.Extensions.System.Text.Json/SystemTextJsonSerializer.cs

+4-1
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,11 @@ public SystemTextJsonSerializer()
2323
}
2424

2525
/// <inheritdoc/>
26-
public T? Deserialize<T>(byte[] serializedObject)
26+
public T? Deserialize<T>(byte[]? serializedObject)
2727
{
28+
if (serializedObject == null)
29+
return default;
30+
2831
return JsonSerializer.Deserialize<T>(serializedObject, defaultSerializer);
2932
}
3033

src/serializers/StackExchange.Redis.Extensions.Utf8Json/Utf8JsonSerializer.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ public byte[] Serialize<T>(T? item)
2020
}
2121

2222
/// <inheritdoc/>
23-
public T? Deserialize<T>(byte[] serializedObject)
23+
public T? Deserialize<T>(byte[]? serializedObject)
2424
{
25-
return JsonSerializer.Deserialize<T>(serializedObject);
25+
return JsonSerializer.Deserialize<T?>(serializedObject);
2626
}
2727
}

0 commit comments

Comments
 (0)