Skip to content

Commit

Permalink
Feature/args helper (#3)
Browse files Browse the repository at this point in the history
* Core

- Work-in-progress mixin

* Core

- Fixed imports

Test

- Out of module test added

* Core

- Cleaned up mixins

* Core

- Documented

* Test

- Documented

* Test

- made private

* Core

- Renamed to `LoggingFuncs`

* Test

- Use new name `LoggingFuncs`

* Core

- Cleanedxc uop

* Extras

- Added new package

* Core

- Moved

* Test

- Moved

* Extras (unittests)

- Cleaned up tests

* Test

- Cleaned up tests
  • Loading branch information
deavmi authored Apr 11, 2024
1 parent 05c74b1 commit 974e8cf
Show file tree
Hide file tree
Showing 3 changed files with 122 additions and 2 deletions.
4 changes: 2 additions & 2 deletions source/gogga/core.d
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public enum GoggaMode
/**
* Information obtained during compilation time (if any)
*/
private struct GoggaCompInfo
public struct GoggaCompInfo
{
/**
* compile time usage file
Expand Down Expand Up @@ -292,7 +292,7 @@ public final class GoggaLogger : BasicLogger
* info = the context
* level = the log level to use
*/
private void doLog(TextType...)(TextType segments, GoggaCompInfo info, Level level)
public void doLog(TextType...)(TextType segments, GoggaCompInfo info, Level level)
{
/* Create a new GoggaMessage */
GoggaMessage message = new GoggaMessage();
Expand Down
90 changes: 90 additions & 0 deletions source/gogga/extras.d
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
/**
* Extra helper utilities
*
* Authors: Tristan Brice Velloza Kildaire (deavmi)
*/
module gogga.extras;

/**
* Mixes in a set of easy helper methods
* for each log-level in `Level`, with
* matching nams
*
* Params:
* gLogger = the `GoggaLogger` identifier
*/
public mixin template LoggingFuncs(alias gLogger)
if(__traits(isSame, typeof(gLogger), GoggaLogger))
{
import std.meta : AliasSeq, aliasSeqOf;
import std.traits : ParameterDefaults;
import std.traits : EnumMembers;
import dlog.basic : Level;

/**
* Generatesd a function named after
* the given log level and using
* the log level provided with
* the correct default (call-site
* based) arguments containing
* line information
*
* Params:
* gLogger = the logger identifier
* level = the log level
*/
private mixin template MakeFuncFor(alias GoggaLogger gLogger, Level level)
{
import std.conv : to;
import gogga.core : GoggaCompInfo;
mixin(`
public void `~to!(string)(level)~`(Text...)
(
Text segments,
string c1 = __FILE_FULL_PATH__,
string c2 = __FILE__,
ulong c3 = __LINE__,
string c4 = __MODULE__,
string c5 = __FUNCTION__,
string c6 = __PRETTY_FUNCTION__
)
{
gLogger.doLog(segments, GoggaCompInfo(c1, c2, c3, c4, c5, c6), Level.`~to!(string)(level)~`);
}
`);
}

// Generate methods per each log level
static foreach(level; EnumMembers!(Level))
{
mixin MakeFuncFor!(gLogger, level);
}
}

version(unittest)
{
import gogga;
import gogga.extras;
import std.stdio : writeln, stdout;
import dlog.basic : Level, FileHandler;
}

/**
* Tests using the mixin for method
* names
*/
unittest
{
GoggaLogger gLogger = new GoggaLogger();
gLogger.addHandler(new FileHandler(stdout));
gLogger.setLevel(Level.DEBUG);

mixin LoggingFuncs!(gLogger);

DEBUG("This is debug", 2.3, true, [2,2]);
ERROR("This is error", 2.3, true, [2,2]);
INFO("This is info", 2.3, true, [2,2]);
WARN("This is warn", 2.3, true, [2,2]);

writeln();
}
30 changes: 30 additions & 0 deletions source/gogga/test.d
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/**
* Out-of-module tests
*
* Authors: Tristan Brice Velloza Kildaire (deavmi)
*/
module gogga.test;

version(unittest)
{
import gogga;
import gogga.extras;
import std.stdio : writeln, stdout;
import dlog.basic : Level, FileHandler;
}

private unittest
{
GoggaLogger gLogger = new GoggaLogger();
gLogger.addHandler(new FileHandler(stdout));
gLogger.setLevel(Level.DEBUG);

mixin LoggingFuncs!(gLogger);

DEBUG("This is debug", 2.3, true, [2,2]);
ERROR("This is error", 2.3, true, [2,2]);
INFO("This is info", 2.3, true, [2,2]);
WARN("This is warn", 2.3, true, [2,2]);

writeln();
}

0 comments on commit 974e8cf

Please sign in to comment.