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