xref: /aosp_15_r20/tools/netsim/src/frontend/frontend_client.h (revision cf78ab8cffb8fc9207af348f23af247fb04370a6)
1*cf78ab8cSAndroid Build Coastguard Worker /*
2*cf78ab8cSAndroid Build Coastguard Worker  * Copyright 2022 The Android Open Source Project
3*cf78ab8cSAndroid Build Coastguard Worker  *
4*cf78ab8cSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*cf78ab8cSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*cf78ab8cSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*cf78ab8cSAndroid Build Coastguard Worker  *
8*cf78ab8cSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*cf78ab8cSAndroid Build Coastguard Worker  *
10*cf78ab8cSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*cf78ab8cSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*cf78ab8cSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*cf78ab8cSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*cf78ab8cSAndroid Build Coastguard Worker  * limitations under the License.
15*cf78ab8cSAndroid Build Coastguard Worker  */
16*cf78ab8cSAndroid Build Coastguard Worker 
17*cf78ab8cSAndroid Build Coastguard Worker // Frontend client
18*cf78ab8cSAndroid Build Coastguard Worker #pragma once
19*cf78ab8cSAndroid Build Coastguard Worker 
20*cf78ab8cSAndroid Build Coastguard Worker #include <cstdint>
21*cf78ab8cSAndroid Build Coastguard Worker #include <memory>
22*cf78ab8cSAndroid Build Coastguard Worker #include <vector>
23*cf78ab8cSAndroid Build Coastguard Worker 
24*cf78ab8cSAndroid Build Coastguard Worker #include "rust/cxx.h"
25*cf78ab8cSAndroid Build Coastguard Worker 
26*cf78ab8cSAndroid Build Coastguard Worker namespace netsim {
27*cf78ab8cSAndroid Build Coastguard Worker namespace frontend {
28*cf78ab8cSAndroid Build Coastguard Worker 
29*cf78ab8cSAndroid Build Coastguard Worker enum class GrpcMethod : ::std::uint8_t;
30*cf78ab8cSAndroid Build Coastguard Worker struct ClientResponseReader;
31*cf78ab8cSAndroid Build Coastguard Worker 
32*cf78ab8cSAndroid Build Coastguard Worker class ClientResult {
33*cf78ab8cSAndroid Build Coastguard Worker  public:
ClientResult(bool is_ok,const std::string & err,const std::vector<unsigned char> & byte_vec)34*cf78ab8cSAndroid Build Coastguard Worker   ClientResult(bool is_ok, const std::string &err,
35*cf78ab8cSAndroid Build Coastguard Worker                const std::vector<unsigned char> &byte_vec)
36*cf78ab8cSAndroid Build Coastguard Worker       : is_ok_(is_ok), err_(err), byte_vec_(byte_vec) {};
37*cf78ab8cSAndroid Build Coastguard Worker 
IsOk()38*cf78ab8cSAndroid Build Coastguard Worker   bool IsOk() const { return is_ok_; };
Err()39*cf78ab8cSAndroid Build Coastguard Worker   rust::String Err() const { return err_; };
ByteVec()40*cf78ab8cSAndroid Build Coastguard Worker   const std::vector<unsigned char> &ByteVec() const { return byte_vec_; };
41*cf78ab8cSAndroid Build Coastguard Worker 
42*cf78ab8cSAndroid Build Coastguard Worker  private:
43*cf78ab8cSAndroid Build Coastguard Worker   bool is_ok_;
44*cf78ab8cSAndroid Build Coastguard Worker   std::string err_;
45*cf78ab8cSAndroid Build Coastguard Worker   const std::vector<unsigned char> byte_vec_;
46*cf78ab8cSAndroid Build Coastguard Worker };
47*cf78ab8cSAndroid Build Coastguard Worker 
48*cf78ab8cSAndroid Build Coastguard Worker class FrontendClient {
49*cf78ab8cSAndroid Build Coastguard Worker  public:
~FrontendClient()50*cf78ab8cSAndroid Build Coastguard Worker   virtual ~FrontendClient() {};
51*cf78ab8cSAndroid Build Coastguard Worker   virtual std::unique_ptr<ClientResult> SendGrpc(
52*cf78ab8cSAndroid Build Coastguard Worker       frontend::GrpcMethod const &grpc_method,
53*cf78ab8cSAndroid Build Coastguard Worker       rust::Vec<rust::u8> const &request_byte_vec) const = 0;
54*cf78ab8cSAndroid Build Coastguard Worker   virtual std::unique_ptr<ClientResult> GetVersion() const = 0;
55*cf78ab8cSAndroid Build Coastguard Worker   virtual std::unique_ptr<ClientResult> ListDevice() const = 0;
56*cf78ab8cSAndroid Build Coastguard Worker   virtual std::unique_ptr<ClientResult> PatchDevice(
57*cf78ab8cSAndroid Build Coastguard Worker       rust::Vec<rust::u8> const &request_byte_vec) const = 0;
58*cf78ab8cSAndroid Build Coastguard Worker   virtual std::unique_ptr<ClientResult> Reset() const = 0;
59*cf78ab8cSAndroid Build Coastguard Worker   virtual std::unique_ptr<ClientResult> ListCapture() const = 0;
60*cf78ab8cSAndroid Build Coastguard Worker   virtual std::unique_ptr<ClientResult> PatchCapture(
61*cf78ab8cSAndroid Build Coastguard Worker       rust::Vec<rust::u8> const &request_byte_vec) const = 0;
62*cf78ab8cSAndroid Build Coastguard Worker   virtual std::unique_ptr<ClientResult> GetCapture(
63*cf78ab8cSAndroid Build Coastguard Worker       rust::Vec<::rust::u8> const &request_byte_vec,
64*cf78ab8cSAndroid Build Coastguard Worker       ClientResponseReader const &client_reader) const = 0;
65*cf78ab8cSAndroid Build Coastguard Worker };
66*cf78ab8cSAndroid Build Coastguard Worker 
67*cf78ab8cSAndroid Build Coastguard Worker std::unique_ptr<FrontendClient> NewFrontendClient(const std::string &server);
68*cf78ab8cSAndroid Build Coastguard Worker 
69*cf78ab8cSAndroid Build Coastguard Worker }  // namespace frontend
70*cf78ab8cSAndroid Build Coastguard Worker }  // namespace netsim
71