def wrap_callable_to_fastapi_compatible(
user_callable: Callable[P_HandlerParams, T_HandlerReturn],
*,
provider_factory: Callable[[], Any],
dependencies: Iterable["params.Depends"],
response_model: Any,
response_model_include: Optional["IncEx"],
response_model_exclude: Optional["IncEx"],
response_model_by_alias: bool,
response_model_exclude_unset: bool,
response_model_exclude_defaults: bool,
response_model_exclude_none: bool,
) -> Callable[["NativeMessage[Any]"], Awaitable[Any]]:
if has_faststream_depends(user_callable):
msg = f"Incorrect `faststream.Depends` usage at `{user_callable.__name__}`. For FastAPI integration use `fastapi.Depends`"
raise SetupError(msg)
if is_faststream_decorated(user_callable):
return user_callable # type: ignore[return-value]
if response_model:
response_field = create_response_field(
name="ResponseModel",
type_=response_model,
mode="serialization",
)
else:
response_field = None
parsed_callable = build_faststream_to_fastapi_parser(
dependent=get_fastapi_native_dependant(user_callable, list(dependencies)),
provider_factory=provider_factory,
response_field=response_field,
response_model_include=response_model_include,
response_model_exclude=response_model_exclude,
response_model_by_alias=response_model_by_alias,
response_model_exclude_unset=response_model_exclude_unset,
response_model_exclude_defaults=response_model_exclude_defaults,
response_model_exclude_none=response_model_exclude_none,
)
mark_faststream_decorated(parsed_callable)
return wraps(user_callable)(parsed_callable)