1ca0551cfSopenharmony_ci/* 2ca0551cfSopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 3ca0551cfSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4ca0551cfSopenharmony_ci * you may not use this file except in compliance with the License. 5ca0551cfSopenharmony_ci * You may obtain a copy of the License at 6ca0551cfSopenharmony_ci * 7ca0551cfSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8ca0551cfSopenharmony_ci * 9ca0551cfSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10ca0551cfSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11ca0551cfSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12ca0551cfSopenharmony_ci * See the License for the specific language governing permissions and 13ca0551cfSopenharmony_ci * limitations under the License. 14ca0551cfSopenharmony_ci */ 15ca0551cfSopenharmony_ci 16ca0551cfSopenharmony_ci#ifndef OHOS_IDL_RUSTCODEEMITTER_H 17ca0551cfSopenharmony_ci#define OHOS_IDL_RUSTCODEEMITTER_H 18ca0551cfSopenharmony_ci 19ca0551cfSopenharmony_ci#include <string> 20ca0551cfSopenharmony_ci 21ca0551cfSopenharmony_ci#include "codegen/code_emitter.h" 22ca0551cfSopenharmony_ci#include "util/string_builder.h" 23ca0551cfSopenharmony_ci 24ca0551cfSopenharmony_cinamespace OHOS { 25ca0551cfSopenharmony_cinamespace Idl { 26ca0551cfSopenharmony_ciclass RustCodeEmitter : public CodeEmitter { 27ca0551cfSopenharmony_cipublic: 28ca0551cfSopenharmony_ci RustCodeEmitter(MetaComponent* mc) 29ca0551cfSopenharmony_ci : CodeEmitter(mc) 30ca0551cfSopenharmony_ci {} 31ca0551cfSopenharmony_ci 32ca0551cfSopenharmony_ci void EmitInterface() override; 33ca0551cfSopenharmony_ci 34ca0551cfSopenharmony_ci void EmitInterfaceProxy() override; 35ca0551cfSopenharmony_ci 36ca0551cfSopenharmony_ci void EmitInterfaceStub() override; 37ca0551cfSopenharmony_ci 38ca0551cfSopenharmony_ciprivate: 39ca0551cfSopenharmony_ci void EmitInterface(StringBuilder& sb); 40ca0551cfSopenharmony_ci 41ca0551cfSopenharmony_ci void EmitLicense(StringBuilder& sb); 42ca0551cfSopenharmony_ci 43ca0551cfSopenharmony_ci void EmitMacros(StringBuilder& sb); 44ca0551cfSopenharmony_ci 45ca0551cfSopenharmony_ci void EmitHeaders(StringBuilder& sb); 46ca0551cfSopenharmony_ci 47ca0551cfSopenharmony_ci void EmitIPCHeaders(StringBuilder& sb); 48ca0551cfSopenharmony_ci 49ca0551cfSopenharmony_ci void EmitCommonHeaders(StringBuilder& sb); 50ca0551cfSopenharmony_ci 51ca0551cfSopenharmony_ci bool EmitCustomHeaders(StringBuilder& sb); 52ca0551cfSopenharmony_ci 53ca0551cfSopenharmony_ci String TrimDot(const String& fpnp); 54ca0551cfSopenharmony_ci 55ca0551cfSopenharmony_ci String GeneratePath(const String& fpnp); 56ca0551cfSopenharmony_ci 57ca0551cfSopenharmony_ci bool AppendRealPath(StringBuilder& sb, const String& fpnp); 58ca0551cfSopenharmony_ci 59ca0551cfSopenharmony_ci void AppendCommandEnums(StringBuilder& sb); 60ca0551cfSopenharmony_ci 61ca0551cfSopenharmony_ci String GetCodeFromMethod(const char* name); 62ca0551cfSopenharmony_ci 63ca0551cfSopenharmony_ci String GetNameFromParameter(const char* name); 64ca0551cfSopenharmony_ci 65ca0551cfSopenharmony_ci void EmitCommandEnums(StringBuilder& sb); 66ca0551cfSopenharmony_ci 67ca0551cfSopenharmony_ci void EmitCommands(StringBuilder& sb); 68ca0551cfSopenharmony_ci 69ca0551cfSopenharmony_ci void EmitRemoteObject(StringBuilder& sb); 70ca0551cfSopenharmony_ci 71ca0551cfSopenharmony_ci void EmitBrokers(StringBuilder& sb); 72ca0551cfSopenharmony_ci 73ca0551cfSopenharmony_ci void WrapLine(StringBuilder& sb, int index, const String& prefix); 74ca0551cfSopenharmony_ci 75ca0551cfSopenharmony_ci void AppendBrokerMethods(StringBuilder& sb); 76ca0551cfSopenharmony_ci 77ca0551cfSopenharmony_ci void AppendBrokerParameters(StringBuilder& sb, MetaParameter* mp); 78ca0551cfSopenharmony_ci 79ca0551cfSopenharmony_ci String ConvertType(MetaType* mt, bool pt = false); 80ca0551cfSopenharmony_ci 81ca0551cfSopenharmony_ci void EmitRemoteRequest(StringBuilder& sb); 82ca0551cfSopenharmony_ci 83ca0551cfSopenharmony_ci void ReadListFromParcel(StringBuilder& sb, MetaType* mt, const String& result, 84ca0551cfSopenharmony_ci const String& name, const String& prefix); 85ca0551cfSopenharmony_ci 86ca0551cfSopenharmony_ci void ReadMapFromParcel(StringBuilder& sb, MetaType* mt, const String& result, 87ca0551cfSopenharmony_ci const String& name, const String& prefix); 88ca0551cfSopenharmony_ci 89ca0551cfSopenharmony_ci void ReadFromParcel(StringBuilder& sb, MetaType* mt, const String& result, 90ca0551cfSopenharmony_ci const String& name, const String& prefix); 91ca0551cfSopenharmony_ci 92ca0551cfSopenharmony_ci void WriteListToParcel(StringBuilder& sb, MetaType* mt, const String& result, 93ca0551cfSopenharmony_ci const String& name, const String& prefix); 94ca0551cfSopenharmony_ci 95ca0551cfSopenharmony_ci void WriteMapToParcel(StringBuilder& sb, MetaType* mt, const String& result, 96ca0551cfSopenharmony_ci const String& name, const String& prefix); 97ca0551cfSopenharmony_ci 98ca0551cfSopenharmony_ci void WriteToParcel(StringBuilder& sb, MetaType* mt, const String& result, 99ca0551cfSopenharmony_ci const String& name, const String& prefix); 100ca0551cfSopenharmony_ci 101ca0551cfSopenharmony_ci void AddRemoteRequestMethods(StringBuilder& sb); 102ca0551cfSopenharmony_ci 103ca0551cfSopenharmony_ci void AddRemoteRequestParameters(StringBuilder& sb, MetaMethod* mm); 104ca0551cfSopenharmony_ci 105ca0551cfSopenharmony_ci void EmitStub(StringBuilder& sb); 106ca0551cfSopenharmony_ci 107ca0551cfSopenharmony_ci void AppendStubMethods(StringBuilder& sb); 108ca0551cfSopenharmony_ci 109ca0551cfSopenharmony_ci void AppendStubParameters(StringBuilder& sb, MetaMethod* mm); 110ca0551cfSopenharmony_ci 111ca0551cfSopenharmony_ci void EmitProxy(StringBuilder& sb); 112ca0551cfSopenharmony_ci 113ca0551cfSopenharmony_ci void AppendProxyMethods(StringBuilder& sb); 114ca0551cfSopenharmony_ci}; 115ca0551cfSopenharmony_ci} 116ca0551cfSopenharmony_ci} 117ca0551cfSopenharmony_ci#endif 118