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_datashare_values_bucket.h"
17
18 #include "datashare_log.h"
19 #include "datashare_js_utils.h"
20 #include "datashare_value_object.h"
21
22 #include "securec.h"
23
24 namespace OHOS {
25 namespace DataShare {
NewInstance(napi_env env,const DataShareValuesBucket & valuesBucket)26 napi_value NewInstance(napi_env env, const DataShareValuesBucket &valuesBucket)
27 {
28 napi_value ret;
29 NAPI_CALL(env, napi_create_object(env, &ret));
30 const auto &valuesMap = valuesBucket.valuesMap;
31 for (auto it = valuesMap.begin(); it != valuesMap.end(); ++it) {
32 std::string key = it->first;
33 auto valueObject = it->second;
34 napi_value value = DataShareJSUtils::Convert2JSValue(env, valueObject);
35 if (value == nullptr) {
36 continue;
37 }
38 NAPI_CALL(env, napi_set_named_property(env, ret, key.c_str(), value));
39 }
40
41 return ret;
42 }
43
UnWrapValuesBucket(DataShareValuesBucket & valuesBucket,const napi_env & env,const napi_value & arg)44 bool UnWrapValuesBucket(DataShareValuesBucket &valuesBucket, const napi_env &env, const napi_value &arg)
45 {
46 napi_value keys = 0;
47 napi_get_property_names(env, arg, &keys);
48 uint32_t arrLen = 0;
49 napi_status status = napi_get_array_length(env, keys, &arrLen);
50 if (status != napi_ok || arrLen == 0) {
51 LOG_ERROR("ValuesBucket err");
52 return false;
53 }
54 for (size_t i = 0; i < arrLen; ++i) {
55 napi_value key = 0;
56 status = napi_get_element(env, keys, i, &key);
57 if (status != napi_ok) {
58 LOG_ERROR("ValuesBucket err");
59 return false;
60 }
61 std::string keyStr = DataShareJSUtils::UnwrapStringFromJS(env, key);
62 napi_value value = 0;
63 napi_get_property(env, arg, key, &value);
64
65 bool ret;
66 DataShareValueObject valueObject = DataShareJSUtils::Convert2ValueObject(env, value, ret);
67 if (!ret) {
68 LOG_ERROR("ValuesBucket err");
69 return false;
70 }
71 valuesBucket.Put(keyStr, valueObject);
72 }
73 return true;
74 }
75
GetValueBucketObject(DataShareValuesBucket & valuesBucket,const napi_env & env,const napi_value & arg)76 bool GetValueBucketObject(DataShareValuesBucket &valuesBucket, const napi_env &env, const napi_value &arg)
77 {
78 return UnWrapValuesBucket(valuesBucket, env, arg);
79 }
80 } // namespace DataShare
81 } // namespace OHOS