CCF
Loading...
Searching...
No Matches
rpc_map.h
Go to the documentation of this file.
1// Copyright (c) Microsoft Corporation. All rights reserved.
2// Licensed under the Apache 2.0 License.
3#pragma once
4
5#include "ds/actors.h"
6#include "rpc_handler.h"
7
8namespace ccf
9{
10 class RPCMap
11 {
12 private:
13 std::unordered_map<ccf::ActorsType, std::shared_ptr<ccf::RpcHandler>> map;
14 std::map<std::string, ccf::ActorsType> actors_map;
15
16 public:
17 RPCMap() = default;
18
19 template <ccf::ActorsType T>
20 void register_frontend(std::shared_ptr<RpcHandler> handler_)
21 {
22 const auto* const name = get_actor_prefix(T);
23 actors_map.emplace(name, T);
24 map.emplace(T, handler_);
25 }
26
27 ccf::ActorsType resolve(const std::string& name)
28 {
29 auto search = actors_map.find(name);
30 if (search == actors_map.end())
31 {
33 }
34
35 return search->second;
36 }
37
38 std::optional<std::shared_ptr<RpcHandler>> find(ccf::ActorsType index)
39 {
40 auto search = map.find(index);
41 if (search == map.end())
42 {
43 return {};
44 }
45
46 return search->second;
47 }
48
49 auto& frontends()
50 {
51 return map;
52 }
53 };
54}
Definition rpc_map.h:11
std::optional< std::shared_ptr< RpcHandler > > find(ccf::ActorsType index)
Definition rpc_map.h:38
auto & frontends()
Definition rpc_map.h:49
RPCMap()=default
void register_frontend(std::shared_ptr< RpcHandler > handler_)
Definition rpc_map.h:20
ccf::ActorsType resolve(const std::string &name)
Definition rpc_map.h:27
Definition app_interface.h:14
constexpr auto get_actor_prefix(ActorsType at)
Definition actors.h:24
ActorsType
Definition actors.h:11
Definition map_serializers.h:11