1#include <node.h>
2#include <v8.h>
3
4namespace {
5
6#define ENCODING_MAP(V) \
7  V(ASCII)              \
8  V(BASE64)             \
9  V(BASE64URL)          \
10  V(BUFFER)             \
11  V(HEX)                \
12  V(LATIN1)             \
13  V(UCS2)               \
14  V(UTF8)               \
15
16static_assert(node::BINARY == node::LATIN1, "BINARY == LATIN1");
17
18void ParseEncoding(const v8::FunctionCallbackInfo<v8::Value>& args) {
19  const node::encoding encoding =
20      node::ParseEncoding(args.GetIsolate(), args[0],
21                          static_cast<node::encoding>(-1));
22  const char* encoding_name = "UNKNOWN";
23#define V(name) if (encoding == node::name) encoding_name = #name;
24  ENCODING_MAP(V)
25#undef V
26  auto encoding_string =
27      v8::String::NewFromUtf8(args.GetIsolate(), encoding_name)
28      .ToLocalChecked();
29  args.GetReturnValue().Set(encoding_string);
30}
31
32void Initialize(v8::Local<v8::Object> exports) {
33  NODE_SET_METHOD(exports, "parseEncoding", ParseEncoding);
34}
35
36}  // anonymous namespace
37
38NODE_MODULE(NODE_GYP_MODULE_NAME, Initialize)
39