14d6c458bSopenharmony_ci/*
24d6c458bSopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd.
34d6c458bSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
44d6c458bSopenharmony_ci * you may not use this file except in compliance with the License.
54d6c458bSopenharmony_ci * You may obtain a copy of the License at
64d6c458bSopenharmony_ci *
74d6c458bSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
84d6c458bSopenharmony_ci *
94d6c458bSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
104d6c458bSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
114d6c458bSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
124d6c458bSopenharmony_ci * See the License for the specific language governing permissions and
134d6c458bSopenharmony_ci * limitations under the License.
144d6c458bSopenharmony_ci */
154d6c458bSopenharmony_ci
164d6c458bSopenharmony_ci#ifndef UTIL_JS_STRINGDECODER_H
174d6c458bSopenharmony_ci#define UTIL_JS_STRINGDECODER_H
184d6c458bSopenharmony_ci
194d6c458bSopenharmony_ci#include <string>
204d6c458bSopenharmony_ci#include "napi/native_api.h"
214d6c458bSopenharmony_ci#include "napi/native_node_api.h"
224d6c458bSopenharmony_ci#include "unicode/ucnv.h"
234d6c458bSopenharmony_ci
244d6c458bSopenharmony_cinamespace OHOS::Util {
254d6c458bSopenharmony_ciclass StringDecoder {
264d6c458bSopenharmony_cipublic:
274d6c458bSopenharmony_ci    explicit StringDecoder(const std::string &encoding);
284d6c458bSopenharmony_ci    ~StringDecoder() { ucnv_close(conv_); }
294d6c458bSopenharmony_ci    napi_value Write(napi_env env, napi_value src, UBool flush = false);
304d6c458bSopenharmony_ci    napi_value End(napi_env env, napi_value src);
314d6c458bSopenharmony_ci    napi_value End(napi_env env);
324d6c458bSopenharmony_ciprivate:
334d6c458bSopenharmony_ci    void FreedMemory(UChar *&pData);
344d6c458bSopenharmony_ci    const char* pend_ {};
354d6c458bSopenharmony_ci    int pendingLen_ {};
364d6c458bSopenharmony_ci    UConverter* conv_ {};
374d6c458bSopenharmony_ci    };
384d6c458bSopenharmony_ci}
394d6c458bSopenharmony_ci#endif // UTIL_JS_STRINGDECODER_H
40