| 1 | using System.Text.Json.Nodes; |
| 2 | using Tomlyn.Model; |
| 3 | |
| 4 | namespace AIGuiders.DotnetTools.TomlCheck; |
| 5 | |
| 6 | internal static class TomlToJsonConverter |
| 7 | { |
| 8 | public static JsonNode ToJsonNode(TomlTable table) => ConvertTable(table); |
| 9 | |
| 10 | private static JsonObject ConvertTable(TomlTable table) |
| 11 | { |
| 12 | var obj = new JsonObject(); |
| 13 | foreach (var (key, value) in table) |
| 14 | obj[key] = ConvertValue(value); |
| 15 | return obj; |
| 16 | } |
| 17 | |
| 18 | private static JsonArray ConvertTableArray(TomlTableArray array) |
| 19 | { |
| 20 | var arr = new JsonArray(); |
| 21 | foreach (var table in array) |
| 22 | arr.Add(ConvertTable(table)); |
| 23 | return arr; |
| 24 | } |
| 25 | |
| 26 | private static JsonArray ConvertArray(TomlArray array) |
| 27 | { |
| 28 | var arr = new JsonArray(); |
| 29 | foreach (var item in array) |
| 30 | arr.Add(ConvertValue(item)); |
| 31 | return arr; |
| 32 | } |
| 33 | |
| 34 | private static JsonNode? ConvertValue(object? value) => |
| 35 | value switch |
| 36 | { |
| 37 | null => null, |
| 38 | TomlTable t => ConvertTable(t), |
| 39 | TomlTableArray ta => ConvertTableArray(ta), |
| 40 | TomlArray a => ConvertArray(a), |
| 41 | string s => JsonValue.Create(s), |
| 42 | bool b => JsonValue.Create(b), |
| 43 | long l => JsonValue.Create(l), |
| 44 | int i => JsonValue.Create(i), |
| 45 | double d => JsonValue.Create(d), |
| 46 | float f => JsonValue.Create(f), |
| 47 | DateTimeOffset dto => JsonValue.Create(dto.ToString("O")), |
| 48 | DateTime dt => JsonValue.Create(dt.ToString("O")), |
| 49 | _ => JsonValue.Create(value.ToString()), |
| 50 | }; |
| 51 | } |
| 52 | |