@@ -1050,8 +1050,36 @@ namespace vast::conv {
10501050 {
10511051 using base = ConversionPassMixin< HLToParserPass, HLToParserBase >;
10521052
1053+ struct get_function_model_request
1054+ {
1055+ static constexpr const char *method = " get_function_model" ;
1056+ static constexpr bool is_notification = false ;
1057+
1058+ std::string functionName;
1059+
1060+ NLOHMANN_DEFINE_TYPE_INTRUSIVE (get_function_model_request, functionName)
1061+
1062+ using response_type = function_model;
1063+ };
1064+
10531065 struct server_handler
1054- {};
1066+ {
1067+ function_models ⊧
1068+
1069+ server::result_type< get_function_model_request >
1070+ operator ()(server::server_base &server, const get_function_model_request &req) {
1071+ if (auto model = models.get (req.functionName )) {
1072+ return *model;
1073+ } else {
1074+ return server::error< get_function_model_request >{
1075+ .code = 0 ,
1076+ .message = " No model for function " + req.functionName + " available"
1077+ };
1078+ }
1079+ }
1080+ };
1081+
1082+ static_assert (server::request_like< get_function_model_request >);
10551083
10561084 static conversion_target create_conversion_target (mcontext_t &mctx) {
10571085 return conversion_target (mctx);
@@ -1078,8 +1106,10 @@ namespace vast::conv {
10781106 }
10791107
10801108 if (!socket.empty ()) {
1081- server = std::make_shared< vast::server::server< server_handler > >(
1082- vast::server::sock_adapter::create_unix_socket (socket)
1109+ server = std::make_shared<
1110+ vast::server::server< server_handler, get_function_model_request > >(
1111+ vast::server::sock_adapter::create_unix_socket (socket), 1 ,
1112+ server_handler{ models }
10831113 );
10841114 }
10851115 }
@@ -1113,7 +1143,8 @@ namespace vast::conv {
11131143 }
11141144
11151145 function_models models;
1116- std::shared_ptr< vast::server::server< server_handler > > server;
1146+ std::shared_ptr< vast::server::server< server_handler, get_function_model_request > >
1147+ server;
11171148 };
11181149
11191150} // namespace vast::conv
0 commit comments