• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

ImmediatePlatform / Immediate.Jobs / 30724662640

02 Aug 2026 12:08AM UTC coverage: 83.991% (+0.09%) from 83.902%
30724662640

Pull #88

github

web-flow
Merge cab42b352 into 5a18eed93
Pull Request #88: Add `Immediate.Validations`

523 of 562 new or added lines in 36 files covered. (93.06%)

4 existing lines in 2 files now uncovered.

8242 of 9813 relevant lines covered (83.99%)

2.72 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

94.44
/src/Immediate.Jobs.Shared/SystemTextJsonJobSerializer.cs
1
using System.Collections.Concurrent;
2
using System.Diagnostics.CodeAnalysis;
3
using System.Text.Json;
4
using System.Text.Json.Serialization.Metadata;
5
using Immediate.Jobs.Shared.Interfaces;
6

7
namespace Immediate.Jobs.Shared;
8

9
/// <summary>
10
///         The default System.Text.Json payload serializer.
11
/// </summary>
12
/// <param name="options">
13
///         The JSON serializer options shared by generated schedulers and invokers.
14
/// </param>
15
public sealed class SystemTextJsonJobSerializer(JsonSerializerOptions options) : IJobSerializer
4✔
16
{
17
        private readonly ConcurrentDictionary<Type, JsonTypeInfo> _payloadTypeInfos = new();
4✔
18

19
        /// <summary>
20
        ///         Creates a serializer using web defaults.
21
        /// </summary>
22
        public SystemTextJsonJobSerializer()
23
                : this(new(JsonSerializerDefaults.Web))
4✔
24
        {
25
        }
4✔
26

27
        /// <summary>
28
        ///         The options shared by generated schedulers and invokers.
29
        /// </summary>
30
        public JsonSerializerOptions Options { get; } = options;
4✔
31

32
        /// <inheritdoc />
33
        [RequiresDynamicCode("Use the generated JsonTypeInfo factory overload for Native AOT.")]
34
        [RequiresUnreferencedCode("Use the generated JsonTypeInfo factory overload when trimming.")]
NEW
35
        public string Serialize<TPayload>(TPayload payload) => JsonSerializer.Serialize(payload, Options);
×
36

37
        /// <inheritdoc />
38
        [RequiresDynamicCode("Use the generated JsonTypeInfo factory overload for Native AOT.")]
39
        [RequiresUnreferencedCode("Use the generated JsonTypeInfo factory overload when trimming.")]
40
        public TPayload Deserialize<TPayload>(string payload) =>
41
                JsonSerializer.Deserialize<TPayload>(payload, Options)
4✔
42
                ?? throw new JsonException($"The payload for {typeof(TPayload).FullName} was null.");
4✔
43

44
        /// <inheritdoc />
45
        public string Serialize<TPayload>(
46
                TPayload payload,
47
                Func<JsonSerializerOptions, JsonTypeInfo<TPayload>> payloadTypeInfoFactory
48
        )
49
        {
50
                ArgumentNullException.ThrowIfNull(payloadTypeInfoFactory);
4✔
51
                return JsonSerializer.Serialize(payload, GetPayloadTypeInfo(payloadTypeInfoFactory));
4✔
52
        }
53

54
        /// <inheritdoc />
55
        public TPayload Deserialize<TPayload>(
56
                string payload,
57
                Func<JsonSerializerOptions, JsonTypeInfo<TPayload>> payloadTypeInfoFactory
58
        )
59
        {
60
                ArgumentNullException.ThrowIfNull(payloadTypeInfoFactory);
4✔
61
                return JsonSerializer.Deserialize(payload, GetPayloadTypeInfo(payloadTypeInfoFactory))
4✔
62
                        ?? throw new JsonException($"The payload for {typeof(TPayload).FullName} was null.");
4✔
63
        }
64

65
        private JsonTypeInfo<TPayload> GetPayloadTypeInfo<TPayload>(
66
                Func<JsonSerializerOptions, JsonTypeInfo<TPayload>> payloadTypeInfoFactory
67
        ) =>
68
                (JsonTypeInfo<TPayload>)_payloadTypeInfos.GetOrAdd(
4✔
69
                        typeof(TPayload),
4✔
70
                        static (_, state) => state.Factory(new(state.Options)),
4✔
71
                        (Factory: payloadTypeInfoFactory, Options)
4✔
72
                );
4✔
73
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc