#pragma once
#include "Common.h"
#include "System/IO/TextWriter.h"
#include "System/String.h"
#include "System/SmartPointer.h"
#include "Extensions/Logging/ILogger.h"

namespace DotNetDupe {
    namespace Extensions {
        namespace Logging {

            class LoggerTextWriter : public DotNetDupe::System::IO::TextWriter {
            private:
                DotNetDupe::System::SmartPointer<ILogger> m_pLogger;
                LogLevel m_logLevel;

            public:
                DOTNETDUPE_API LoggerTextWriter(
                    const DotNetDupe::System::String& sCategoryName = "Console", 
                    LogLevel logLevel = LogLevel::Information);

                DOTNETDUPE_API LoggerTextWriter(
                    const DotNetDupe::System::SmartPointer<ILogger>& pLogger, 
                    LogLevel logLevel = LogLevel::Information);

                DOTNETDUPE_API virtual ~LoggerTextWriter() override = default;

                DOTNETDUPE_API void Close() override;
                DOTNETDUPE_API void Dispose() override;
                DOTNETDUPE_API void Flush() override;

                DOTNETDUPE_API virtual System::Text::EncodingPtr GetEncoding() const override;

                DOTNETDUPE_API void Write(bool bValue) override;
                DOTNETDUPE_API void Write(char chValue) override;
                DOTNETDUPE_API void Write(const char* pValue) override;
                DOTNETDUPE_API void Write(const DotNetDupe::System::String& sValue) override;
                DOTNETDUPE_API void Write(int iValue) override;
                DOTNETDUPE_API void Write(long long llValue) override;
                DOTNETDUPE_API void Write(float fValue) override;
                DOTNETDUPE_API void Write(double dValue) override;

                DOTNETDUPE_API void WriteLine() override;
                DOTNETDUPE_API void WriteLine(bool bValue) override;
                DOTNETDUPE_API void WriteLine(char chValue) override;
                DOTNETDUPE_API void WriteLine(const char* pValue) override;
                DOTNETDUPE_API void WriteLine(const DotNetDupe::System::String& sValue) override;
                DOTNETDUPE_API void WriteLine(int iValue) override;
                DOTNETDUPE_API void WriteLine(long long llValue) override;
                DOTNETDUPE_API void WriteLine(float fValue) override;
                DOTNETDUPE_API void WriteLine(double dValue) override;
            };

        }
    }
}

Generated by OpenCppCoverage (Version: 0.9.9.0)