summaryrefslogtreecommitdiff
path: root/CommandLineWrapper/JsonResults/JsonResultGetter.cs
blob: e1bf607d26c09bcceb9982627d8bb75206dcf68d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using static JVCSCommandInvoker;

namespace CommandLineWrapper.JsonResults
{
    public abstract class JsonResultGetter<TJsonFormat>
    {
        protected abstract Task<InvokeResult> ExecCommand(JVCSWorkspace workspace);

        public async Task<TJsonFormat?> Get(JVCSWorkspace workspace)
        {
            var result = await ExecCommand(workspace);
            var output = result.StandardOutput;

            string trimmedOutput = output?.Trim() ?? "{}";
            if (!string.IsNullOrEmpty(trimmedOutput) && trimmedOutput.StartsWith("{") && trimmedOutput.EndsWith("}"))
            {
                var options = new System.Text.Json.JsonSerializerOptions
                {
                    PropertyNameCaseInsensitive = true,
                    PropertyNamingPolicy = null,
                };

                options.Converters.Add(new System.Text.Json.Serialization.JsonStringEnumConverter());

                return System.Text.Json.JsonSerializer.Deserialize<TJsonFormat>(trimmedOutput, options);
            }

            return default(TJsonFormat);
        }
    }
}