boost::asio::awaitable<std::unique_ptr<Name>> MakeName(servicelib::Context, servicelib::IServiceEnvironment&)C++ Coro Extension model
C++ Coro services use cppcoroservicelib. Generated graph assembly owns runtime wiring; application code supplies typed business implementations through preserved maker functions.
When to use
Use this page while implementing a generated business function or endpoint handler.
Behavior
- The runtime is C++20 stackless coroutines on Boost.Asio with an epoll or io_uring build backend.
- Generated assembly awaits each business-function maker and shares its instance across the streams that reference it. Business headers and implementations remain user-owned. The I/O backend does not change their public API.
- Business-function makers receive context and environment and create one instance per service, shared by all referencing streams. Only infrastructure makers additionally receive their typed configuration. Endpoint-handler makers follow the same context-and-environment contract as other business functions.
- Returning a construction error stops service startup instead of leaving a partially wired graph.
Regeneration contract
Function and endpoint implementation files are preserved by the merge script. Generated registries and graph assembly may change around them; make merge-validate detects a preserved maker whose generated signature is no longer compatible.
Choosing where state lives
Keep reusable clients and immutable dependencies on the implementation object. Keep request, record, RPC, or workflow invocation data in handler state. Use the runtime context for cancellation and correlation instead of inventing a parallel context channel.
Generated and user-owned boundaries
How generated services discover and run application code.
Generated graph assemblyFramework ownedCreates streams, links, connectors, endpoint consumers, serializers, stores, and runtime pools from the designer graph.
Maker functionUser entry pointboost::asio::awaitable<std::unique_ptr<Name>> MakeName(servicelib::Context, servicelib::IServiceEnvironment&)
Implementation objectUser ownedContains business dependencies and reusable state for one generated function or endpoint.
Typed configGenerated contractMatches the selected graph node and exposes its runtime configuration to the maker.
Service environmentFramework dependencyProvides configured observability and runtime services without requiring global variables.
Generated extension pattern
inline boost::asio::awaitable<std::unique_ptr<ValidateOrder>> MakeValidateOrder(
servicelib::Context context,
servicelib::IServiceEnvironment& environment) {
co_return std::make_unique<ValidateOrder>();
}