66 lines
2.0 KiB
C
66 lines
2.0 KiB
C
|
#pragma once
|
||
|
|
||
|
#include <string_view>
|
||
|
#include <v8.h>
|
||
|
|
||
|
namespace Nan {
|
||
|
/* UTF-8 Helpers */
|
||
|
inline v8::Local<v8::String> StringUTF8(std::string_view buffer) {
|
||
|
Nan::EscapableHandleScope scope{};
|
||
|
auto data = v8::String::NewFromUtf8(Nan::GetCurrentContext()->GetIsolate(), buffer.data(), v8::NewStringType::kNormal, buffer.length());
|
||
|
|
||
|
v8::Local<v8::String> response{};
|
||
|
if(!data.ToLocal(&response))
|
||
|
throw std::bad_alloc{};
|
||
|
return scope.Escape(response);
|
||
|
}
|
||
|
|
||
|
template <size_t S>
|
||
|
inline v8::Local<v8::String> StringUTF8(const char (&buffer)[S]) {
|
||
|
return Nan::StringUTF8(buffer, S);
|
||
|
}
|
||
|
|
||
|
inline v8::Local<v8::String> StringUTF8(const char* buffer, size_t length) {
|
||
|
return Nan::StringUTF8(std::string_view{buffer, length});
|
||
|
}
|
||
|
|
||
|
/* Latin1 Helpers */
|
||
|
inline v8::Local<v8::String> String(std::string_view buffer) {
|
||
|
Nan::EscapableHandleScope scope{};
|
||
|
auto data = v8::String::NewFromOneByte(Nan::GetCurrentContext()->GetIsolate(), (uint8_t*) buffer.data(), v8::NewStringType::kNormal, buffer.length());
|
||
|
|
||
|
v8::Local<v8::String> response{};
|
||
|
if(!data.ToLocal(&response))
|
||
|
throw std::bad_alloc{};
|
||
|
return scope.Escape(response);
|
||
|
}
|
||
|
|
||
|
template <size_t S>
|
||
|
inline v8::Local<v8::String> String(const char (&buffer)[S]) {
|
||
|
return Nan::StringUTF8(buffer, S);
|
||
|
}
|
||
|
|
||
|
inline v8::Local<v8::String> String(const char* buffer, size_t length) {
|
||
|
return Nan::StringUTF8(std::string_view{buffer, length});
|
||
|
}
|
||
|
|
||
|
/* Wide char helpers */
|
||
|
inline v8::Local<v8::String> String(std::wstring_view buffer) {
|
||
|
Nan::EscapableHandleScope scope{};
|
||
|
auto data = v8::String::NewFromTwoByte(Nan::GetCurrentContext()->GetIsolate(), (uint16_t*) buffer.data(), v8::NewStringType::kNormal, buffer.length());
|
||
|
|
||
|
v8::Local<v8::String> response{};
|
||
|
if(!data.ToLocal(&response))
|
||
|
throw std::bad_alloc{};
|
||
|
return scope.Escape(response);
|
||
|
}
|
||
|
|
||
|
template <size_t S>
|
||
|
inline v8::Local<v8::String> String(const wchar_t (&buffer)[S]) {
|
||
|
return Nan::String(buffer, S);
|
||
|
}
|
||
|
|
||
|
inline v8::Local<v8::String> String(const wchar_t* buffer, size_t length) {
|
||
|
return Nan::String(std::wstring_view{buffer, length});
|
||
|
}
|
||
|
}
|