Forge
csharp3407750f
1using AgentForge.Contracts;
2using AgentForge.Models;
3using AgentForge.Services;
4using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
5
6namespace AgentForge.Data;
7
8internal static class ForgeValueConverters
9{
10 internal static readonly ValueConverter<DriveMode, string> DriveMode =
11 new(mode => mode.ToSlug(), slug => DriveModeExtensions.ParseSlugOrDefault(slug));
12
13 internal static readonly ValueConverter<IssueStatus, string> IssueStatus =
14 new(status => status.ToSlug(), slug => ParseIssueStatus(slug));
15
16 internal static readonly ValueConverter<MergeRequestStatus, string> MergeRequestStatus =
17 new(status => status.ToSlug(), slug => ParseMergeRequestStatus(slug));
18
19 internal static readonly ValueConverter<CiRunStatus, string> CiRunStatus =
20 new(status => status.ToSlug(), slug => ParseCiRunStatus(slug));
21
22 internal static readonly ValueConverter<ForgeScope, string> ForgeScope =
23 new(scopes => scopes.ToStorage(), storage => ForgeScopeExtensions.ParseStorage(storage));
24
25 internal static readonly ValueConverter<RepoVisibility, string> RepoVisibility =
26 new(visibility => visibility.ToSlug(), slug => RepoVisibilityExtensions.ParseSlugOrDefault(slug));
27
28 internal static readonly ValueConverter<RepoVisibility?, string?> NullableRepoVisibility =
29 new(
30 visibility => visibility.HasValue ? visibility.Value.ToSlug() : null,
31 slug => string.IsNullOrWhiteSpace(slug) ? null : RepoVisibilityExtensions.ParseSlugOrDefault(slug));
32
33 internal static readonly ValueConverter<ForgeOrgRole, string> ForgeOrgRole =
34 new(role => role.ToSlug(), slug => ForgeOrgRoleExtensions.ParseSlugOrDefault(slug));
35
36 internal static readonly ValueConverter<List<CodeAnchor>, string> Anchors =
37 new(
38 anchors => CodeAnchorJson.Serialize(anchors),
39 json => CodeAnchorJson.Deserialize(json).ToList());
40
41 internal static readonly ValueConverter<List<int>, string> IntList =
42 new(
43 values => IntListJson.Serialize(values),
44 json => IntListJson.Deserialize(json).ToList());
45
46 internal static readonly ValueConverter<DateTimeOffset, string> Timestamp =
47 new(
48 value => value.ToString("O"),
49 text => DateTimeOffset.Parse(text, System.Globalization.CultureInfo.InvariantCulture));
50
51 internal static readonly ValueConverter<DateTimeOffset?, string?> NullableTimestamp =
52 new(
53 value => value.HasValue ? value.Value.ToString("O") : null,
54 text => string.IsNullOrWhiteSpace(text)
55 ? null
56 : DateTimeOffset.Parse(text, System.Globalization.CultureInfo.InvariantCulture));
57
58 private static IssueStatus ParseIssueStatus(string slug) =>
59 IssueStatusExtensions.TryParseSlug(slug, out var parsed) ? parsed : Models.IssueStatus.Open;
60
61 private static MergeRequestStatus ParseMergeRequestStatus(string slug) =>
62 MergeRequestStatusExtensions.TryParseSlug(slug, out var parsed) ? parsed : Models.MergeRequestStatus.Open;
63
64 private static CiRunStatus ParseCiRunStatus(string slug) =>
65 CiRunStatusExtensions.TryParseSlug(slug, out var parsed) ? parsed : Models.CiRunStatus.Unknown;
66}
67
View only · write via MCP/CIDE