• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "napi_util.h"
17 
18 #include <string>
19 
20 namespace OHOS {
21 namespace UpdateEngine {
22 const int32_t STRING_MAX_LENGTH = 200;
23 
GetInt32(napi_env env,napi_value arg,const std::string & attrName,int32_t & intValue)24 int32_t NapiUtil::GetInt32(napi_env env, napi_value arg, const std::string &attrName, int32_t &intValue)
25 {
26     bool result = false;
27     napi_status status = napi_has_named_property(env, arg, attrName.c_str(), &result);
28     if (result && (status == napi_ok)) {
29         napi_value value = nullptr;
30         napi_get_named_property(env, arg, attrName.c_str(), &value);
31         napi_get_value_int32(env, value, &intValue);
32     }
33     return static_cast<int32_t>(ClientStatus::CLIENT_SUCCESS);
34 }
35 
GetBool(napi_env env,napi_value arg,const std::string & attrName,bool & value)36 int32_t NapiUtil::GetBool(napi_env env, napi_value arg, const std::string &attrName, bool &value)
37 {
38     bool result = false;
39     napi_status status = napi_has_named_property(env, arg, attrName.c_str(), &result);
40     if (result && (status == napi_ok)) {
41         napi_value obj = nullptr;
42         napi_get_named_property(env, arg, attrName.c_str(), &obj);
43         napi_get_value_bool(env, obj, &value);
44     }
45     return static_cast<int32_t>(ClientStatus::CLIENT_SUCCESS);
46 }
47 
GetString(napi_env env,napi_value arg,const std::string & attrName,std::string & strValue)48 int32_t NapiUtil::GetString(napi_env env, napi_value arg, const std::string &attrName, std::string &strValue)
49 {
50     bool result = false;
51     napi_status status = napi_has_named_property(env, arg, attrName.c_str(), &result);
52     if (result && (status == napi_ok)) {
53         napi_value value = nullptr;
54         napi_get_named_property(env, arg, attrName.c_str(), &value);
55         return GetString(env, value, strValue);
56     }
57     return static_cast<int32_t>(ClientStatus::CLIENT_SUCCESS);
58 }
59 
GetString(napi_env env,napi_value arg,std::string & strValue)60 int32_t NapiUtil::GetString(napi_env env, napi_value arg, std::string &strValue)
61 {
62     napi_valuetype valuetype;
63     napi_status status = napi_typeof(env, arg, &valuetype);
64     PARAM_CHECK(status == napi_ok, return CAST_INT(ClientStatus::CLIENT_FAIL), "Failed to napi_typeof");
65     PARAM_CHECK(valuetype == napi_string, return CAST_INT(ClientStatus::CLIENT_INVALID_TYPE), "Invalid type");
66 
67     std::vector<char> buff(STRING_MAX_LENGTH);
68     size_t copied;
69     status = napi_get_value_string_utf8(env, arg, static_cast<char*>(buff.data()), STRING_MAX_LENGTH, &copied);
70     PARAM_CHECK(status == napi_ok, return CAST_INT(ClientStatus::CLIENT_INVALID_TYPE), "Error get string");
71     strValue.assign(buff.data(), copied);
72     return CAST_INT(ClientStatus::CLIENT_SUCCESS);
73 }
74 
SetString(napi_env env,napi_value arg,const std::string & attrName,const std::string & string)75 int32_t NapiUtil::SetString(napi_env env, napi_value arg, const std::string &attrName, const std::string &string)
76 {
77     napi_value value = nullptr;
78     napi_create_string_utf8(env, string.c_str(), string.length(), &value);
79     napi_set_named_property(env, arg, attrName.c_str(), value);
80     return static_cast<int32_t>(ClientStatus::CLIENT_SUCCESS);
81 }
82 
SetInt32(napi_env env,napi_value arg,const std::string & attrName,int32_t intValue)83 int32_t NapiUtil::SetInt32(napi_env env, napi_value arg, const std::string &attrName, int32_t intValue)
84 {
85     napi_value infoStatus = nullptr;
86     napi_create_int32(env, intValue, &infoStatus);
87     napi_set_named_property(env, arg, attrName.c_str(), infoStatus);
88     return static_cast<int32_t>(ClientStatus::CLIENT_SUCCESS);
89 }
90 
SetInt64(napi_env env,napi_value arg,const std::string & attrName,int64_t intValue)91 int32_t NapiUtil::SetInt64(napi_env env, napi_value arg, const std::string &attrName, int64_t intValue)
92 {
93     napi_value infoStatus = nullptr;
94     napi_create_int64(env, intValue, &infoStatus);
95     napi_set_named_property(env, arg, attrName.c_str(), infoStatus);
96     return static_cast<int32_t>(ClientStatus::CLIENT_SUCCESS);
97 }
98 
SetBool(napi_env env,napi_value arg,const std::string & attrName,bool value)99 int32_t NapiUtil::SetBool(napi_env env, napi_value arg, const std::string &attrName, bool value)
100 {
101     napi_value infoStatus = nullptr;
102     napi_create_int32(env, value, &infoStatus);
103     napi_set_named_property(env, arg, attrName.c_str(), infoStatus);
104     return static_cast<int32_t>(ClientStatus::CLIENT_SUCCESS);
105 }
106 
IsTypeOf(napi_env env,napi_value arg,napi_valuetype type)107 ClientStatus NapiUtil::IsTypeOf(napi_env env, napi_value arg, napi_valuetype type)
108 {
109     napi_valuetype valueType;
110     napi_status status = napi_typeof(env, arg, &valueType);
111     PARAM_CHECK(status == napi_ok, return ClientStatus::CLIENT_FAIL, "Failed to napi_typeof");
112     PARAM_CHECK(valueType == type, return ClientStatus::CLIENT_INVALID_TYPE, "Not same napi type");
113     return ClientStatus::CLIENT_SUCCESS;
114 }
115 
CreateReference(napi_env env,napi_value arg,uint32_t refcount,napi_ref & reference)116 ClientStatus NapiUtil::CreateReference(napi_env env, napi_value arg, uint32_t refcount, napi_ref &reference)
117 {
118     napi_status status = napi_create_reference(env, arg, refcount, &reference);
119     PARAM_CHECK(status == napi_ok, return ClientStatus::CLIENT_FAIL, "Failed to create reference");
120     return ClientStatus::CLIENT_SUCCESS;
121 }
122 } // namespace UpdateEngine
123 } // namespace OHOS