1/*
2 * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved.
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#ifndef IPC_GENERATOR_IMPL_H
17#define IPC_GENERATOR_IMPL_H
18
19#include <map>
20#include <ostream>
21
22class IpcServices {
23public:
24    IpcServices()
25    {
26        methodCount_ = 0;
27    }
28    ~IpcServices() {}
29    std::string serviceName_;
30    std::map<int, std::string> methodList_;
31    std::map<int, std::string> requestList_;
32    std::map<int, std::string> responseList_;
33    int methodCount_;
34    bool AddMethod(std::string method, std::string request, std::string response)
35    {
36        for (int i = 0; i < methodCount_; i++) {
37            if (methodList_[i] == method) {
38                return false;
39            }
40        }
41        methodList_[methodCount_] = method;
42        requestList_[methodCount_] = request;
43        responseList_[methodCount_] = response;
44        methodCount_++;
45        return true;
46    }
47};
48
49class IpcGeneratorImpl {
50public:
51    IpcGeneratorImpl();
52    ~IpcGeneratorImpl();
53
54    std::string SetNames(std::string fileName, std::string packageName);
55    bool AddService(std::string serviceName);
56    bool AddServiceMethod(std::string serviceName,
57                          std::string methodName,
58                          std::string requestName,
59                          std::string responseName);
60
61    std::string GenHeader();
62    std::string GenSource();
63
64private:
65    std::string fileName_ = "";
66    std::string baseName_ = "";
67    std::string packageName_ = "";
68    std::string headFileName_ = "";
69
70    void GenerateHeader(std::string& header_str);
71
72    std::string GenSendResponseImpl(int servicep, const std::string& server_class_name);
73    std::string GenOnResponseImpl(int servicep, const std::string& client_class_name);
74
75    std::string GenServiceCallImpl(int servicep, const std::string& server_class_name);
76    std::string GenClientProcImpl(int servicep);
77    std::string GenClientRequestImpl(int servicep, const std::string& client_class_name);
78    std::string GenServiceProcImpl(int servicep);
79
80    std::map<int, IpcServices> serviceList_;
81    int serviceCount_ = 0;
82
83    std::map<int, std::string> enumMessageDict_;
84};
85
86#endif