1115cd2caSopenharmony_ci/* 2115cd2caSopenharmony_ci * Copyright (C) 2022 Huawei Device Co., Ltd. 3115cd2caSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4115cd2caSopenharmony_ci * you may not use this file except in compliance with the License. 5115cd2caSopenharmony_ci * You may obtain a copy of the License at 6115cd2caSopenharmony_ci * 7115cd2caSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8115cd2caSopenharmony_ci * 9115cd2caSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10115cd2caSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11115cd2caSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12115cd2caSopenharmony_ci * See the License for the specific language governing permissions and 13115cd2caSopenharmony_ci * limitations under the License. 14115cd2caSopenharmony_ci */ 15115cd2caSopenharmony_ci 16115cd2caSopenharmony_ci#include "contacts_napi_utils.h" 17115cd2caSopenharmony_ci 18115cd2caSopenharmony_cinamespace OHOS { 19115cd2caSopenharmony_cinamespace ContactsApi { 20115cd2caSopenharmony_cistatic constexpr const char *JS_ERROR_INVALID_INPUT_PARAMETER_STRING = 21115cd2caSopenharmony_ci "parameter error. Mandatory parameters are left unspecified."; 22115cd2caSopenharmony_cistatic constexpr const char *JS_ERROR_VERIFICATION_FAILED_PARAMETER_STRING = 23115cd2caSopenharmony_ci "parameter error. The type of id must be number."; 24115cd2caSopenharmony_cistatic constexpr const char *JS_ERROR_PERMISSION_DENIED_STRING = "Permission denied"; 25115cd2caSopenharmony_cinapi_value ContactsNapiUtils::ToInt32Value(napi_env env, int32_t value) 26115cd2caSopenharmony_ci{ 27115cd2caSopenharmony_ci napi_value staticValue = nullptr; 28115cd2caSopenharmony_ci napi_create_int32(env, value, &staticValue); 29115cd2caSopenharmony_ci return staticValue; 30115cd2caSopenharmony_ci} 31115cd2caSopenharmony_ci 32115cd2caSopenharmony_cinapi_value ContactsNapiUtils::CreateClassConstructor(napi_env env, napi_callback_info info) 33115cd2caSopenharmony_ci{ 34115cd2caSopenharmony_ci napi_value thisArg = nullptr; 35115cd2caSopenharmony_ci void *data = nullptr; 36115cd2caSopenharmony_ci napi_get_cb_info(env, info, nullptr, nullptr, &thisArg, &data); 37115cd2caSopenharmony_ci napi_value global = nullptr; 38115cd2caSopenharmony_ci napi_get_global(env, &global); 39115cd2caSopenharmony_ci return thisArg; 40115cd2caSopenharmony_ci} 41115cd2caSopenharmony_ci 42115cd2caSopenharmony_cibool ContactsNapiUtils::MatchValueType(napi_env env, napi_value value, napi_valuetype targetType) 43115cd2caSopenharmony_ci{ 44115cd2caSopenharmony_ci napi_valuetype valueType = napi_undefined; 45115cd2caSopenharmony_ci napi_typeof(env, value, &valueType); 46115cd2caSopenharmony_ci return valueType == targetType; 47115cd2caSopenharmony_ci} 48115cd2caSopenharmony_ci 49115cd2caSopenharmony_cibool ContactsNapiUtils::MatchParameters( 50115cd2caSopenharmony_ci napi_env env, const napi_value parameters[], std::initializer_list<napi_valuetype> valueTypes) 51115cd2caSopenharmony_ci{ 52115cd2caSopenharmony_ci if (parameters == nullptr) { 53115cd2caSopenharmony_ci return false; 54115cd2caSopenharmony_ci } 55115cd2caSopenharmony_ci int i = 0; 56115cd2caSopenharmony_ci for (auto beg = valueTypes.begin(); beg != valueTypes.end(); ++beg) { 57115cd2caSopenharmony_ci if (!MatchValueType(env, parameters[i], *beg)) { 58115cd2caSopenharmony_ci return false; 59115cd2caSopenharmony_ci } 60115cd2caSopenharmony_ci ++i; 61115cd2caSopenharmony_ci } 62115cd2caSopenharmony_ci return true; 63115cd2caSopenharmony_ci} 64115cd2caSopenharmony_ci 65115cd2caSopenharmony_cinapi_value ContactsNapiUtils::CreateError(napi_env env, int32_t err) 66115cd2caSopenharmony_ci{ 67115cd2caSopenharmony_ci napi_value businessError = nullptr; 68115cd2caSopenharmony_ci napi_value errorCode = nullptr; 69115cd2caSopenharmony_ci napi_value errorMessage = nullptr; 70115cd2caSopenharmony_ci if (err == PERMISSION_ERROR) { 71115cd2caSopenharmony_ci napi_create_string_utf8(env, JS_ERROR_PERMISSION_DENIED_STRING, NAPI_AUTO_LENGTH, &errorMessage); 72115cd2caSopenharmony_ci } 73115cd2caSopenharmony_ci if (err == PARAMETER_ERROR) { 74115cd2caSopenharmony_ci napi_create_string_utf8(env, JS_ERROR_INVALID_INPUT_PARAMETER_STRING, NAPI_AUTO_LENGTH, &errorMessage); 75115cd2caSopenharmony_ci } 76115cd2caSopenharmony_ci napi_create_int32(env, err, &errorCode); 77115cd2caSopenharmony_ci napi_create_error(env, nullptr, errorMessage, &businessError); 78115cd2caSopenharmony_ci napi_set_named_property(env, businessError, "code", errorCode); 79115cd2caSopenharmony_ci return businessError; 80115cd2caSopenharmony_ci} 81115cd2caSopenharmony_ci 82115cd2caSopenharmony_cinapi_value ContactsNapiUtils::CreateErrorByVerification(napi_env env, int32_t err) 83115cd2caSopenharmony_ci{ 84115cd2caSopenharmony_ci napi_value businessError = nullptr; 85115cd2caSopenharmony_ci napi_value errorCode = nullptr; 86115cd2caSopenharmony_ci napi_value errorMessage = nullptr; 87115cd2caSopenharmony_ci if (err == PERMISSION_ERROR) { 88115cd2caSopenharmony_ci napi_create_string_utf8(env, JS_ERROR_PERMISSION_DENIED_STRING, NAPI_AUTO_LENGTH, &errorMessage); 89115cd2caSopenharmony_ci } 90115cd2caSopenharmony_ci if (err == PARAMETER_ERROR) { 91115cd2caSopenharmony_ci napi_create_string_utf8(env, JS_ERROR_VERIFICATION_FAILED_PARAMETER_STRING, NAPI_AUTO_LENGTH, &errorMessage); 92115cd2caSopenharmony_ci } 93115cd2caSopenharmony_ci napi_create_int32(env, err, &errorCode); 94115cd2caSopenharmony_ci napi_create_error(env, nullptr, errorMessage, &businessError); 95115cd2caSopenharmony_ci napi_set_named_property(env, businessError, "code", errorCode); 96115cd2caSopenharmony_ci return businessError; 97115cd2caSopenharmony_ci} 98115cd2caSopenharmony_ci} // namespace ContactsApi 99115cd2caSopenharmony_ci} // namespace OHOS 100