2020 } \
2121 }
2222
23- #define ROCKS_STATUS_THROWS_NAPI (call ) \
23+ #define ROCKS_STATUS_THROWS_NAPI (call ) \
2424 { \
2525 auto _status = (call); \
2626 if (!_status.ok ()) { \
@@ -147,23 +147,7 @@ static napi_status GetString(napi_env env, napi_value from, rocksdb::PinnableSli
147147 return napi_ok;
148148}
149149
150- static napi_status EncodingIsBuffer (napi_env env, napi_value obj, const std::string_view& key, bool & result) {
151- bool has = false ;
152- NAPI_STATUS_RETURN (napi_has_named_property (env, obj, key.data (), &has));
153-
154- if (has) {
155- napi_value value;
156- NAPI_STATUS_RETURN (napi_get_named_property (env, obj, key.data (), &value));
157-
158- size_t size;
159- NAPI_STATUS_RETURN (napi_get_value_string_utf8 (env, value, nullptr , 0 , &size));
160-
161- // Value is either "buffer" or "utf8" so we can tell them apart just by size
162- result = size == 6 ;
163- }
164-
165- return napi_ok;
166- }
150+ enum class Encoding { Invalid, Buffer, String };
167151
168152static napi_status GetValue (napi_env env, napi_value value, bool & result) {
169153 return napi_get_value_bool (env, value, &result);
@@ -184,20 +168,14 @@ static napi_status GetValue(napi_env env, napi_value value, int64_t& result) {
184168static napi_status GetValue (napi_env env, napi_value value, uint64_t & result) {
185169 int64_t result2;
186170 NAPI_STATUS_RETURN (napi_get_value_int64 (env, value, &result2));
187- if (result2 < 0 ) {
188- return napi_generic_failure;
189- }
190171 result = static_cast <uint64_t >(result2);
191172 return napi_ok;
192173}
193174
194175static napi_status GetValue (napi_env env, napi_value value, unsigned long & result) {
195176 int64_t result2;
196177 NAPI_STATUS_RETURN (napi_get_value_int64 (env, value, &result2));
197- if (result2 < 0 ) {
198- return napi_generic_failure;
199- }
200- result = static_cast <uint64_t >(result2);
178+ result = static_cast <unsigned long >(result2);
201179 return napi_ok;
202180}
203181
@@ -213,6 +191,21 @@ static napi_status GetValue(napi_env env, napi_value value, rocksdb::ColumnFamil
213191 return napi_get_value_external (env, value, reinterpret_cast <void **>(&result));
214192}
215193
194+ static napi_status GetValue (napi_env env, napi_value value, Encoding& result) {
195+ std::string str;
196+ NAPI_STATUS_RETURN (GetValue (env, value, str));
197+
198+ if (str == " buffer" ) {
199+ result = Encoding::Buffer;
200+ } else if (str == " utf8" ) {
201+ result = Encoding::String;
202+ } else {
203+ return napi_invalid_arg;
204+ }
205+
206+ return napi_ok;
207+ }
208+
216209template <typename T>
217210static napi_status GetValue (napi_env env, napi_value value, std::optional<T>& result) {
218211 result = T{};
@@ -254,6 +247,13 @@ static napi_status GetProperty(napi_env env,
254247 return GetValue (env, value, result);
255248}
256249
250+ static napi_status EncodingIsBuffer (napi_env env, napi_value obj, const std::string_view& key, bool & result) {
251+ Encoding encoding;
252+ NAPI_STATUS_RETURN (GetProperty (env, obj, key, encoding));
253+ result = encoding == Encoding::Buffer;
254+ return napi_ok;
255+ }
256+
257257template <typename T>
258258napi_status Convert (napi_env env, T&& s, bool asBuffer, napi_value& result) {
259259 if (!s) {
0 commit comments