Skip to content

Commit 56e31e8

Browse files
committed
refactor: change to delegate
1 parent bf7ad48 commit 56e31e8

5 files changed

Lines changed: 38 additions & 59 deletions

File tree

src/Codehard.Functional/Codehard.Functional.AspNetCore/ControllerExtensions.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ private static IActionResult MapErrorToActionResult(Error err)
4848
public static IActionResult MatchToResult<T>(
4949
this Fin<T> fin,
5050
HttpStatusCode successStatusCode = HttpStatusCode.OK,
51-
ILogger? logger = default)
51+
ILogger? logger = null)
5252
{
5353
return fin
5454
.Match(
@@ -61,7 +61,7 @@ public static IActionResult MatchToResult<T>(
6161
logger?.Log(hre);
6262
return MapErrorToActionResult(hre);
6363
default:
64-
logger?.Log(err, exceptionHandler: WebApiExceptionHandler.Instance);
64+
logger?.Log(err, exceptionHandler: WebApiExceptionHandler.Handle);
6565
return MapErrorToActionResult(err);
6666
}
6767
});
@@ -74,7 +74,7 @@ public static IActionResult MatchToResult<T>(
7474
public static IActionResult MatchToResult<T>(
7575
this Fin<Option<T>> fin,
7676
HttpStatusCode successStatusCode = HttpStatusCode.OK,
77-
ILogger? logger = default)
77+
ILogger? logger = null)
7878
{
7979
return fin
8080
.Match(
@@ -107,7 +107,7 @@ public static IActionResult MatchToResult<T>(
107107
public static ValueTask<IActionResult> RunToResultAsync<T>(
108108
this Aff<T> aff,
109109
HttpStatusCode successStatusCode = HttpStatusCode.OK,
110-
ILogger? logger = default)
110+
ILogger? logger = null)
111111
{
112112
return aff
113113
.Run()
@@ -123,7 +123,7 @@ public static ValueTask<IActionResult> RunToResultAsync<T>(
123123
public static IActionResult RunToResult<T>(
124124
this Eff<T> eff,
125125
HttpStatusCode successStatusCode = HttpStatusCode.OK,
126-
ILogger? logger = default)
126+
ILogger? logger = null)
127127
{
128128
return eff
129129
.Run()

src/Codehard.Functional/Codehard.Functional.AspNetCore/LoggingExtesions.cs

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -46,18 +46,18 @@ public static void Log(this ILogger logger, HttpResultError error)
4646
}
4747

4848
/// <summary>
49-
/// Provides a centralized mechanism for handling exceptions and logging errors in a web API context.
50-
/// Implements the <see cref="IExceptionHandler"/> interface to process and log errors with optional context-specific behavior.
49+
/// Provides methods to handle and log exceptions in a structured format for web APIs.
5150
/// </summary>
52-
public class WebApiExceptionHandler : IExceptionHandler
51+
public static class WebApiExceptionHandler
5352
{
54-
private static WebApiExceptionHandler instance = new();
55-
56-
public static WebApiExceptionHandler Instance => instance;
57-
58-
private WebApiExceptionHandler() { }
59-
60-
public Unit Handle(Error error, ILogger logger, LogLevel logLevel = LogLevel.Information)
53+
/// <summary>
54+
/// Handles the specified error by logging it using the provided logger
55+
/// and applying the given log level.
56+
/// </summary>
57+
/// <param name="logger">The logger used to record the error information.</param>
58+
/// <param name="error">The error instance containing details to handle and log.</param>
59+
/// <param name="logLevel">The severity level of the log entry. Defaults to Information.</param>
60+
public static void Handle(ILogger logger, Error error, LogLevel logLevel = LogLevel.Information)
6161
{
6262
error.Exception.Match(
6363
Some: ex =>
@@ -83,7 +83,5 @@ public Unit Handle(Error error, ILogger logger, LogLevel logLevel = LogLevel.Inf
8383
logger.Log(logLevel, "{Code} : {Message}", error.Code, error.Message);
8484
}
8585
});
86-
87-
return unit;
8886
}
8987
}

src/Codehard.Functional/Codehard.Functional.Logger/DefaultExceptionHandler.cs

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,17 @@
33
namespace Codehard.Functional.Logger;
44

55
/// <summary>
6-
/// Provides a default implementation for handling exceptions in a logging context.
7-
/// This class is intended to standardize how exceptions and errors are logged
8-
/// based on the provided parameters such as the error details, logger instance,
9-
/// and log level.
6+
/// Provides a default exception handling mechanism for logging errors using an <see cref="ILogger"/> instance.
107
/// </summary>
11-
public class DefaultExceptionHandler : IExceptionHandler
8+
public static class DefaultExceptionHandler
129
{
13-
private static DefaultExceptionHandler instance = new DefaultExceptionHandler();
14-
15-
public static DefaultExceptionHandler Instance => instance;
16-
17-
private DefaultExceptionHandler() { }
18-
19-
public Unit Handle(Error error, ILogger logger, LogLevel logLevel = LogLevel.Information)
10+
/// <summary>
11+
/// Handles logging of an error using the specified <see cref="ILogger"/> instance.
12+
/// </summary>
13+
/// <param name="logger">The logger used to log the error information.</param>
14+
/// <param name="error">The error to be logged, containing an optional exception and message.</param>
15+
/// <param name="logLevel">The logging level to use, defaults to <see cref="LogLevel.Information"/>.</param>
16+
public static void Handle(ILogger logger, Error error, LogLevel logLevel = LogLevel.Information)
2017
{
2118
error.Exception.Match(
2219
Some: ex =>
@@ -35,7 +32,5 @@ public Unit Handle(Error error, ILogger logger, LogLevel logLevel = LogLevel.Inf
3532
logger.Log(logLevel, "{Code} : {Message}", error.Code, error.Message);
3633
}
3734
});
38-
39-
return unit;
4035
}
4136
}

src/Codehard.Functional/Codehard.Functional.Logger/IExceptionHandler.cs

Lines changed: 0 additions & 22 deletions
This file was deleted.

src/Codehard.Functional/Codehard.Functional.Logger/LoggerExtensions.cs

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,24 @@ private static Unit Log(
1111
this ILogger logger,
1212
Option<Error> errorOpt,
1313
LogLevel logLevel = LogLevel.Information,
14-
IExceptionHandler? exceptionHandler = null)
14+
Action<ILogger, Error, LogLevel>? exceptionHandler = null)
1515
{
1616
return
1717
errorOpt.Match(
1818
Some: error =>
1919
{
2020
Log(logger, error.Inner, logLevel);
2121

22-
return exceptionHandler?.Handle(error, logger, logLevel) ??
23-
DefaultExceptionHandler.Instance.Handle(error, logger, logLevel);
22+
if (exceptionHandler != null)
23+
{
24+
exceptionHandler?.Invoke(logger, error, logLevel);
25+
}
26+
else
27+
{
28+
DefaultExceptionHandler.Handle(logger, error, logLevel);
29+
}
30+
31+
return unit;
2432
},
2533
None: unit);
2634
}
@@ -56,7 +64,7 @@ public static Unit Log(
5664
this ILogger logger,
5765
Error error,
5866
LogLevel logLevel = LogLevel.Information,
59-
IExceptionHandler? exceptionHandler = null)
67+
Action<ILogger, Error, LogLevel>? exceptionHandler = null)
6068
{
6169
Log(logger, Some(error), logLevel, exceptionHandler);
6270

@@ -76,7 +84,7 @@ public static Error DoLog(
7684
this ILogger logger,
7785
Error error,
7886
LogLevel logLevel = LogLevel.Information,
79-
IExceptionHandler? exceptionHandler = null)
87+
Action<ILogger, Error, LogLevel>? exceptionHandler = null)
8088
{
8189
Log(logger, Some(error), logLevel, exceptionHandler);
8290

@@ -96,7 +104,7 @@ public static Fin<T> LogIfFail<T>(
96104
this ILogger logger,
97105
Fin<T> fin,
98106
LogLevel logLevel = LogLevel.Information,
99-
IExceptionHandler? exceptionHandler = null)
107+
Action<ILogger, Error, LogLevel>? exceptionHandler = null)
100108
{
101109
fin.IfFail(err => Log(logger, err, logLevel, exceptionHandler));
102110

0 commit comments

Comments
 (0)