V15 / 313404a015e8
WorkspaceResultExtensions.cs
Lilith/Core/Workspace/Extensions/WorkspaceResultExtensions.cs
Unchanged from the preceding versionCS
using System.Text.Json;
namespace Lilith.Core.Workspace.Extensions;
internal static class WorkspaceResultExtensions
{
internal static string FormatReply(this WorkspaceResult result)
{
if (result.Data is null) return result.Message;
var data = JsonSerializer.SerializeToElement(result.Data);
return data.ValueKind switch
{
JsonValueKind.Object when data.TryGetProperty("text", out var text) =>
result.Message + "\n" + data.GetProperty("path").GetString() + "\n" + text.GetString() +
NextPage(data, "More text is available at offset "),
JsonValueKind.Object when data.TryGetProperty("matches", out var matches) =>
FormatMatches(result.Message, data, matches),
_ when result.Status == "needs_approval" =>
result.Message + "\nProposed text: " + data.GetProperty("content_preview").GetString(),
JsonValueKind.Object when data.TryGetProperty("path", out var path) =>
FormatPath(result.Message, data, path),
_ => result.Message + "\n" + data.GetRawText()
};
}
private static string NextPage(JsonElement data, string prefix) =>
data.GetProperty("next_offset").ValueKind == JsonValueKind.Number
? "\n" + prefix + data.GetProperty("next_offset") + "."
: "";
private static string FormatMatches(string message, JsonElement data, JsonElement matches) =>
matches.GetArrayLength() switch
{
0 => "No matching workspace items.",
_ => message + "\n" + string.Join("\n", matches.EnumerateArray()
.Select(m => m.GetProperty("path").GetString() + " — " + m.GetProperty("excerpt").GetString())) +
NextPage(data, "Continue at offset ")
};
private static string FormatPath(string message, JsonElement data, JsonElement path) =>
message + "\n" + path.GetString() +
(data.TryGetProperty("destination", out var destination) && destination.GetString()?.Length > 0
? " → " + destination.GetString() : "") +
(data.TryGetProperty("bin_id", out var bin) && bin.ValueKind == JsonValueKind.String
? "\nBin ID: " + bin.GetString() : "");
}