mirror of
https://github.com/TeamOctolings/Octobot.git
synced 2025-01-31 09:09:00 +03:00
Octol1ttle
793afd0e06
1. The root namespace was changed from `Octobot` to `TeamOctolings.Octobot`: > DO prefix namespace names with a company name to prevent namespaces from different companies from having the same name. 2. `Octobot.cs` was renamed to `Program.cs`: > DO NOT use the same name for a namespace and a type in that namespace. 3. `IOption`, `Option` were renamed to `IGuildOption` and `GuildOption` respectively: > DO NOT introduce generic type names such as Element, Node, Log, and Message. 4. `Utility` was moved out of the `Services` namespace. It didn't belong there anyway 5. `Program` static fields were moved to `Utility` 6. Localisation files were moved back to the project source files. Looks like this fixed `Message.Designer.cs` code generation --------- Signed-off-by: Octol1ttle <l1ttleofficial@outlook.com>
65 lines
1.8 KiB
C#
65 lines
1.8 KiB
C#
using System.Diagnostics;
|
|
using Microsoft.Extensions.Logging;
|
|
using Remora.Results;
|
|
|
|
namespace TeamOctolings.Octobot.Extensions;
|
|
|
|
public static class ResultExtensions
|
|
{
|
|
public static Result FromError(Result result)
|
|
{
|
|
LogResultStackTrace(result);
|
|
|
|
return result;
|
|
}
|
|
|
|
public static Result FromError<T>(Result<T> result)
|
|
{
|
|
var casted = (Result)result;
|
|
LogResultStackTrace(casted);
|
|
|
|
return casted;
|
|
}
|
|
|
|
private static void LogResultStackTrace(Result result)
|
|
{
|
|
if (result.IsSuccess)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (Utility.StaticLogger is null)
|
|
{
|
|
throw new InvalidOperationException();
|
|
}
|
|
|
|
Utility.StaticLogger.LogError("{ErrorType}: {ErrorMessage}{NewLine}{StackTrace}",
|
|
result.Error.GetType().FullName, result.Error.Message, Environment.NewLine, ConstructStackTrace());
|
|
|
|
var inner = result.Inner;
|
|
while (inner is { IsSuccess: false })
|
|
{
|
|
Utility.StaticLogger.LogError("Caused by: {ResultType}: {ResultMessage}",
|
|
inner.Error.GetType().FullName, inner.Error.Message);
|
|
|
|
inner = inner.Inner;
|
|
}
|
|
}
|
|
|
|
private static string ConstructStackTrace()
|
|
{
|
|
var stackArray = new StackTrace(3, true).ToString().Split(Environment.NewLine).ToList();
|
|
for (var i = stackArray.Count - 1; i >= 0; i--)
|
|
{
|
|
var frame = stackArray[i];
|
|
var trimmed = frame.TrimStart();
|
|
if (trimmed.StartsWith("at System.Threading", StringComparison.Ordinal)
|
|
|| trimmed.StartsWith("at System.Runtime.CompilerServices", StringComparison.Ordinal))
|
|
{
|
|
stackArray.RemoveAt(i);
|
|
}
|
|
}
|
|
|
|
return string.Join(Environment.NewLine, stackArray);
|
|
}
|
|
}
|