1c29fa5a6Sopenharmony_ci/*
2c29fa5a6Sopenharmony_ci * Copyright (c) 2022-2023 Huawei Device Co., Ltd.
3c29fa5a6Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4c29fa5a6Sopenharmony_ci * you may not use this file except in compliance with the License.
5c29fa5a6Sopenharmony_ci * You may obtain a copy of the License at
6c29fa5a6Sopenharmony_ci *
7c29fa5a6Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0
8c29fa5a6Sopenharmony_ci *
9c29fa5a6Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10c29fa5a6Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11c29fa5a6Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12c29fa5a6Sopenharmony_ci * See the License for the specific language governing permissions and
13c29fa5a6Sopenharmony_ci * limitations under the License.
14c29fa5a6Sopenharmony_ci */
15c29fa5a6Sopenharmony_ci
16c29fa5a6Sopenharmony_ci#ifndef UTIL_NAPI_H
17c29fa5a6Sopenharmony_ci#define UTIL_NAPI_H
18c29fa5a6Sopenharmony_ci
19c29fa5a6Sopenharmony_ci#include "napi/native_api.h"
20c29fa5a6Sopenharmony_ci#include "napi/native_node_api.h"
21c29fa5a6Sopenharmony_ci#include "utils/log.h"
22c29fa5a6Sopenharmony_ci
23c29fa5a6Sopenharmony_cinamespace OHOS {
24c29fa5a6Sopenharmony_cinamespace MMI {
25c29fa5a6Sopenharmony_ci#define CHKRV(state, desc) \
26c29fa5a6Sopenharmony_ci    do { \
27c29fa5a6Sopenharmony_ci        if ((state) != napi_ok) { \
28c29fa5a6Sopenharmony_ci            MMI_HILOGE("%{public}s failed", std::string(desc).c_str()); \
29c29fa5a6Sopenharmony_ci            return; \
30c29fa5a6Sopenharmony_ci        } \
31c29fa5a6Sopenharmony_ci    } while (0)
32c29fa5a6Sopenharmony_ci
33c29fa5a6Sopenharmony_ci#define CHKRP(state, desc) \
34c29fa5a6Sopenharmony_ci    do { \
35c29fa5a6Sopenharmony_ci        if ((state) != napi_ok) { \
36c29fa5a6Sopenharmony_ci            MMI_HILOGE("%{public}s failed", std::string(desc).c_str()); \
37c29fa5a6Sopenharmony_ci            return nullptr; \
38c29fa5a6Sopenharmony_ci        } \
39c29fa5a6Sopenharmony_ci    } while (0)
40c29fa5a6Sopenharmony_ci
41c29fa5a6Sopenharmony_ci#define CHKRF(state, desc) \
42c29fa5a6Sopenharmony_ci    do { \
43c29fa5a6Sopenharmony_ci        if ((state) != napi_ok) { \
44c29fa5a6Sopenharmony_ci            MMI_HILOGE("%{public}s failed", std::string(desc).c_str()); \
45c29fa5a6Sopenharmony_ci            return false; \
46c29fa5a6Sopenharmony_ci        } \
47c29fa5a6Sopenharmony_ci    } while (0)
48c29fa5a6Sopenharmony_ci
49c29fa5a6Sopenharmony_ci#define CHKRR(state, desc, ret) \
50c29fa5a6Sopenharmony_ci    do { \
51c29fa5a6Sopenharmony_ci        if ((state) != napi_ok) { \
52c29fa5a6Sopenharmony_ci            MMI_HILOGE("%{public}s failed", std::string(desc).c_str()); \
53c29fa5a6Sopenharmony_ci            return ret; \
54c29fa5a6Sopenharmony_ci        } \
55c29fa5a6Sopenharmony_ci    } while (0)
56c29fa5a6Sopenharmony_ci
57c29fa5a6Sopenharmony_ci#define CHECK_RETURN(condition, desc, retVal) \
58c29fa5a6Sopenharmony_ci    do { \
59c29fa5a6Sopenharmony_ci        if (!(condition)) { \
60c29fa5a6Sopenharmony_ci            MMI_HILOGE("%{public}s failed", std::string(desc).c_str()); \
61c29fa5a6Sopenharmony_ci            return retVal; \
62c29fa5a6Sopenharmony_ci        } \
63c29fa5a6Sopenharmony_ci    } while (0)
64c29fa5a6Sopenharmony_ci
65c29fa5a6Sopenharmony_ci#define CHKRV_SCOPE(env, state, desc, scope) \
66c29fa5a6Sopenharmony_ci    do { \
67c29fa5a6Sopenharmony_ci        if ((state) != napi_ok) { \
68c29fa5a6Sopenharmony_ci            MMI_HILOGE("%{public}s failed", std::string(desc).c_str()); \
69c29fa5a6Sopenharmony_ci            napi_close_handle_scope(env, scope); \
70c29fa5a6Sopenharmony_ci            return; \
71c29fa5a6Sopenharmony_ci        } \
72c29fa5a6Sopenharmony_ci    } while (0)
73c29fa5a6Sopenharmony_ci
74c29fa5a6Sopenharmony_ci#define CHKRV_SCOPE_DEL(env, state, desc, scope) \
75c29fa5a6Sopenharmony_ci    do { \
76c29fa5a6Sopenharmony_ci        if ((state) != napi_ok) { \
77c29fa5a6Sopenharmony_ci            MMI_HILOGE("%{public}s failed", std::string(desc).c_str()); \
78c29fa5a6Sopenharmony_ci            napi_close_handle_scope(env, scope); \
79c29fa5a6Sopenharmony_ci            return; \
80c29fa5a6Sopenharmony_ci        } \
81c29fa5a6Sopenharmony_ci    } while (0)
82c29fa5a6Sopenharmony_ci
83c29fa5a6Sopenharmony_ci#define CHECK_SCOPE_BEFORE_BREAK(env, state, desc, scope, pointerEvent) \
84c29fa5a6Sopenharmony_ci    do { \
85c29fa5a6Sopenharmony_ci        if ((state) != napi_ok) { \
86c29fa5a6Sopenharmony_ci            MMI_HILOGE("%{public}s failed", std::string(desc).c_str()); \
87c29fa5a6Sopenharmony_ci            (pointerEvent)->MarkProcessed(); \
88c29fa5a6Sopenharmony_ci            napi_close_handle_scope(env, scope); \
89c29fa5a6Sopenharmony_ci            break; \
90c29fa5a6Sopenharmony_ci        } \
91c29fa5a6Sopenharmony_ci    } while (0)
92c29fa5a6Sopenharmony_ci
93c29fa5a6Sopenharmony_ci#define CHKNRV_SCOPE(env, cond, desc, scope) \
94c29fa5a6Sopenharmony_ci    do { \
95c29fa5a6Sopenharmony_ci        if ((cond) == nullptr) { \
96c29fa5a6Sopenharmony_ci            MMI_HILOGE("%{public}s is nullptr, failed", std::string(desc).c_str()); \
97c29fa5a6Sopenharmony_ci            napi_close_handle_scope(env, scope); \
98c29fa5a6Sopenharmony_ci            return; \
99c29fa5a6Sopenharmony_ci        } \
100c29fa5a6Sopenharmony_ci    } while (0)
101c29fa5a6Sopenharmony_ci
102c29fa5a6Sopenharmony_ci#define THROWERR(env, desc) \
103c29fa5a6Sopenharmony_ci    do { \
104c29fa5a6Sopenharmony_ci        MMI_HILOGE("%{public}s", (#desc)); \
105c29fa5a6Sopenharmony_ci        auto infoTemp = std::string(__FUNCTION__)+ ": " + #desc; \
106c29fa5a6Sopenharmony_ci        napi_throw_error(env, nullptr, infoTemp.c_str()); \
107c29fa5a6Sopenharmony_ci    } while (0)
108c29fa5a6Sopenharmony_ci
109c29fa5a6Sopenharmony_cinamespace UtilNapi {
110c29fa5a6Sopenharmony_cibool TypeOf(napi_env env, napi_value value, napi_valuetype type);
111c29fa5a6Sopenharmony_ci} // namespace UtilNapi
112c29fa5a6Sopenharmony_ci} // namespace MMI
113c29fa5a6Sopenharmony_ci} // namespace OHOS
114c29fa5a6Sopenharmony_ci#endif // UTIL_NAPI_H
115