MODE: INLINE
#include <panda/log/console.h>

struct XSConsoleLogger : ConsoleLogger {
    using ConsoleLogger::ConsoleLogger;
    
    void log (const string& msg, const Info&) override {
        Io io = PL_defoutgv;
        if (!io) return;
        auto fp = io.ofp();
        if (!fp) return;
        PerlIO_write(fp, msg.data(), msg.length());
        PerlIO_write(fp, "\n", 1);
    }
};

namespace xs {
    template <class TYPE> struct Typemap<ConsoleLogger*, TYPE> : Typemap<ILogger*, TYPE> {
        static string package () { return "XLog::Console"; }
    };
    template <> struct Typemap<XSConsoleLogger*> : Typemap<ConsoleLogger*, XSConsoleLogger*> {};
}

MODULE = XLog               PACKAGE = XLog::Console
PROTOTYPES: DISABLE

BOOT {
    Stash(__PACKAGE__).inherit("XLog::ILogger");
}

XSConsoleLogger* XSConsoleLogger::new ()