using Microsoft.Extensions.Logging;
using Remora.Results;
namespace TeamOctolings.Octobot.Extensions;
public static class LoggerExtensions
{
///
/// Checks if the has failed due to an error that has resulted from neither invalid user
/// input nor the execution environment and logs the error using the provided .
///
///
/// This has special behavior for - its exception will be passed to the
///
///
/// The logger to use.
/// The Result whose error check.
/// The message to use if this result has failed.
public static void LogResult(this ILogger logger, IResult result, string? message = "")
{
if (result.IsSuccess)
{
return;
}
if (result.Error is ExceptionError exe)
{
if (exe.Exception is OperationCanceledException)
{
return;
}
logger.LogError(exe.Exception, "{ErrorMessage}", message);
return;
}
logger.LogWarning("{UserMessage}{NewLine}{ResultErrorMessage}", message, Environment.NewLine,
result.Error.Message);
}
}