14d6c458bSopenharmony_ci/*
24d6c458bSopenharmony_ci * Copyright (c) 2022 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_TEXTENCODER_H
174d6c458bSopenharmony_ci#define UTIL_JS_TEXTENCODER_H
184d6c458bSopenharmony_ci
194d6c458bSopenharmony_ci#include <string>
204d6c458bSopenharmony_ci
214d6c458bSopenharmony_ci#include "napi/native_api.h"
224d6c458bSopenharmony_ci#include "napi/native_node_api.h"
234d6c458bSopenharmony_ci#include "native_engine.h"
244d6c458bSopenharmony_ci#include "unicode/ucnv.h"
254d6c458bSopenharmony_ci
264d6c458bSopenharmony_cinamespace OHOS::Util {
274d6c458bSopenharmony_ci    constexpr const int32_t API_VERSION_MOD = 100; // 100: api version mod
284d6c458bSopenharmony_ci    class TextEncoder {
294d6c458bSopenharmony_ci    public:
304d6c458bSopenharmony_ci        /**
314d6c458bSopenharmony_ci         * Constructor of textdecoder.
324d6c458bSopenharmony_ci         *
334d6c458bSopenharmony_ci         * @param encoding Encoding format
344d6c458bSopenharmony_ci         */
354d6c458bSopenharmony_ci        explicit TextEncoder(const std::string &encoding) : encoding_(encoding) {}
364d6c458bSopenharmony_ci
374d6c458bSopenharmony_ci        /**
384d6c458bSopenharmony_ci         * Destructor of textencoder.
394d6c458bSopenharmony_ci         */
404d6c458bSopenharmony_ci        virtual ~TextEncoder() {}
414d6c458bSopenharmony_ci
424d6c458bSopenharmony_ci        /**
434d6c458bSopenharmony_ci         * Get encoding format.
444d6c458bSopenharmony_ci         *
454d6c458bSopenharmony_ci         * @param env NAPI environment parameters.
464d6c458bSopenharmony_ci         */
474d6c458bSopenharmony_ci        napi_value GetEncoding(napi_env env) const;
484d6c458bSopenharmony_ci
494d6c458bSopenharmony_ci        /**
504d6c458bSopenharmony_ci         * Output the corresponding text after encoding the input parameters.
514d6c458bSopenharmony_ci         *
524d6c458bSopenharmony_ci         * @param env NAPI environment parameters.
534d6c458bSopenharmony_ci         * @param src A string that needs to be encoded.
544d6c458bSopenharmony_ci         */
554d6c458bSopenharmony_ci        napi_value Encode(napi_env env, napi_value src) const;
564d6c458bSopenharmony_ci
574d6c458bSopenharmony_ci        /**
584d6c458bSopenharmony_ci         * Place the generated UTF-8 encoded text.
594d6c458bSopenharmony_ci         *
604d6c458bSopenharmony_ci         * @param env NAPI environment parameters.
614d6c458bSopenharmony_ci         * @param src A string that needs to be encoded.
624d6c458bSopenharmony_ci         * @param dest Uint8array object instance, which is used to put the generated UTF-8 encoded text into it.
634d6c458bSopenharmony_ci         */
644d6c458bSopenharmony_ci        napi_value EncodeInto(napi_env env, napi_value src, napi_value dest) const;
654d6c458bSopenharmony_ci
664d6c458bSopenharmony_ci        void SetOrgEncoding(std::string orgEncoding)
674d6c458bSopenharmony_ci        {
684d6c458bSopenharmony_ci            orgEncoding_ = orgEncoding;
694d6c458bSopenharmony_ci        }
704d6c458bSopenharmony_ci    private:
714d6c458bSopenharmony_ci        std::string encoding_ {};
724d6c458bSopenharmony_ci        std::string orgEncoding_ {};
734d6c458bSopenharmony_ci    };
744d6c458bSopenharmony_ci}
754d6c458bSopenharmony_ci#endif // UTIL_JS_TEXTENCODER_H
76