Skip to content

Commit

Permalink
OrcLib: Text: add enum class Encoding
Browse files Browse the repository at this point in the history
  • Loading branch information
fabienfl-orc committed Feb 10, 2021
1 parent 15ea817 commit 1803a40
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 1 deletion.
4 changes: 3 additions & 1 deletion src/OrcLib/CMakeLists.txt
Expand Up @@ -531,8 +531,10 @@ source_group(In&Out\\TableOutput\\ApacheOrc
set(SRC_TEXT
"Text/Console.h"
"Text/Console.cpp"
"Text/Iconv.cpp"
"Text/Encoding.h"
"Text/Encoding.cpp"
"Text/Iconv.h"
"Text/Iconv.cpp"
"Text/Format.h"
"Text/HexDump.h"
"Text/Tree.h"
Expand Down
47 changes: 47 additions & 0 deletions src/OrcLib/Text/Encoding.cpp
@@ -0,0 +1,47 @@
//
// SPDX-License-Identifier: LGPL-2.1-or-later
//
// Copyright © 2021 ANSSI. All Rights Reserved.
//
// Author(s): fabienfl
//

#include "Encoding.h"

#include <string>

namespace Orc {

constexpr std::wstring_view kUtf8 = L"utf-8";
constexpr std::wstring_view kUtf16 = L"utf-16";
constexpr std::wstring_view kUnknown = L"unknown";

std::wstring_view ToString(Text::Encoding encoding)
{
switch (encoding)
{
case Text::Encoding::Utf8:
return kUtf8;
case Text::Encoding::Utf16:
return kUtf16;
default:
return kUnknown;
}
}

Text::Encoding ToEncoding(const std::wstring& disposition, std::error_code& ec)
{
const std::map<std::wstring_view, Text::Encoding> map = {
{kUtf8, Text::Encoding::Utf8}, {kUtf16, Text::Encoding::Utf16}};

auto it = map.find(disposition);
if (it == std::cend(map))
{
ec = std::make_error_code(std::errc::invalid_argument);
return Text::Encoding::Unknown;
}

return it->second;
}

} // namespace Orc
29 changes: 29 additions & 0 deletions src/OrcLib/Text/Encoding.h
@@ -0,0 +1,29 @@
//
// SPDX-License-Identifier: LGPL-2.1-or-later
//
// Copyright © 2021 ANSSI. All Rights Reserved.
//
// Author(s): fabienfl
//

#pragma once

#include <string_view>
#include <string>

namespace Orc {
namespace Text {

enum class Encoding
{
Unknown,
Utf8,
Utf16,
};

} // namespace Text

std::wstring_view ToString(Text::Encoding encoding);
Text::Encoding ToEncoding(const std::wstring& encoding, std::error_code& ec = std::error_code());

} // namespace Orc

0 comments on commit 1803a40

Please sign in to comment.