MCPcopy Create free account
hub / github.com/AimRT/AimRT / StandardizeServer

Method StandardizeServer

src/interface/aimrt_module_cpp_interface/context/context.h:566–617  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

564// OpSrv::StandardizeServer implementation
565template <class Q, class P, concepts::SupportedServer<Q, P> Func>
566constexpr auto OpSrv::StandardizeServer(Func&& cb) {
567 using namespace concepts;
568 using ServerFunc = std::function<aimrt::co::Task<aimrt::rpc::Status>(aimrt::rpc::ContextRef, const Q&, P&)>;
569
570 // Handle coroutine types (already return Task<Status>)
571 if constexpr (ServerCoroutineWithCtx<decltype(cb), Q, P>) {
572 return ServerFunc(std::forward<Func>(cb));
573 } else if constexpr (ServerCoroutine<decltype(cb), Q, P>) {
574 return ServerFunc([callback = std::forward<Func>(cb)](
575 aimrt::rpc::ContextRef, const Q& q, P& p) -> aimrt::co::Task<aimrt::rpc::Status> {
576 return callback(q, p);
577 });
578 } else if constexpr (ServerCoroutineReturnVoidWithCtx<decltype(cb), Q, P>) {
579 return ServerFunc([callback = std::forward<Func>(cb)](
580 aimrt::rpc::ContextRef ctx, const Q& q, P& p) -> aimrt::co::Task<aimrt::rpc::Status> {
581 co_await callback(ctx, q, p);
582 co_return aimrt::rpc::Status();
583 });
584 } else if constexpr (ServerCoroutineReturnVoid<decltype(cb), Q, P>) {
585 return ServerFunc([callback = std::forward<Func>(cb)](
586 aimrt::rpc::ContextRef, const Q& q, P& p) -> aimrt::co::Task<aimrt::rpc::Status> {
587 co_await callback(q, p);
588 co_return aimrt::rpc::Status();
589 });
590 }
591 // Handle synchronous function types (wrap in coroutine)
592 else if constexpr (ServerFunctionWithCtx<decltype(cb), Q, P>) {
593 return ServerFunc([callback = std::forward<Func>(cb)](
594 aimrt::rpc::ContextRef ctx, const Q& q, P& p) -> aimrt::co::Task<aimrt::rpc::Status> {
595 co_return callback(ctx, q, p);
596 });
597 } else if constexpr (ServerFunctionReturnVoidWithCtx<decltype(cb), Q, P>) {
598 return ServerFunc([callback = std::forward<Func>(cb)](
599 aimrt::rpc::ContextRef ctx, const Q& q, P& p) -> aimrt::co::Task<aimrt::rpc::Status> {
600 callback(ctx, q, p);
601 co_return aimrt::rpc::Status();
602 });
603 } else if constexpr (ServerFunction<decltype(cb), Q, P>) {
604 return ServerFunc([callback = std::forward<Func>(cb)](
605 aimrt::rpc::ContextRef, const Q& q, P& p) -> aimrt::co::Task<aimrt::rpc::Status> {
606 co_return callback(q, p);
607 });
608 } else if constexpr (ServerFunctionReturnVoid<decltype(cb), Q, P>) {
609 return ServerFunc([callback = std::forward<Func>(cb)](
610 aimrt::rpc::ContextRef, const Q& q, P& p) -> aimrt::co::Task<aimrt::rpc::Status> {
611 callback(q, p);
612 co_return aimrt::rpc::Status();
613 });
614 } else {
615 static_assert(sizeof(decltype(cb)) == 0, "Unsupported server callback type.");
616 }
617}
618
619} // namespace aimrt::context
620

Callers

nothing calls this directly

Calls 1

StatusClass · 0.85

Tested by

no test coverage detected