// The façade: every subpackage's public surface re-exported as it was, so
// `@moonapi.X` is still the X it was before the split. A program that needs
// only one part imports that subpackage and links nothing else. Enum
// constructors do not travel through `pub using`; where the expected type is
// known the bare name resolves (`Get`, not `@moonapi.Get`), and where it is not
// — a raised error — the subpackage is named.

///|
pub using @status {
  data_response,
  data_url,
  delete_cookie,
  file_response,
  html,
  HTTP_100_CONTINUE,
  HTTP_101_SWITCHING_PROTOCOLS,
  HTTP_102_PROCESSING,
  HTTP_103_EARLY_HINTS,
  HTTP_200_OK,
  HTTP_201_CREATED,
  HTTP_202_ACCEPTED,
  HTTP_203_NON_AUTHORITATIVE_INFORMATION,
  HTTP_204_NO_CONTENT,
  HTTP_205_RESET_CONTENT,
  HTTP_206_PARTIAL_CONTENT,
  HTTP_207_MULTI_STATUS,
  HTTP_208_ALREADY_REPORTED,
  HTTP_226_IM_USED,
  HTTP_300_MULTIPLE_CHOICES,
  HTTP_301_MOVED_PERMANENTLY,
  HTTP_302_FOUND,
  HTTP_303_SEE_OTHER,
  HTTP_304_NOT_MODIFIED,
  HTTP_305_USE_PROXY,
  HTTP_306_RESERVED,
  HTTP_307_TEMPORARY_REDIRECT,
  HTTP_308_PERMANENT_REDIRECT,
  HTTP_400_BAD_REQUEST,
  HTTP_401_UNAUTHORIZED,
  HTTP_402_PAYMENT_REQUIRED,
  HTTP_403_FORBIDDEN,
  HTTP_404_NOT_FOUND,
  HTTP_405_METHOD_NOT_ALLOWED,
  HTTP_406_NOT_ACCEPTABLE,
  HTTP_407_PROXY_AUTHENTICATION_REQUIRED,
  HTTP_408_REQUEST_TIMEOUT,
  HTTP_409_CONFLICT,
  HTTP_410_GONE,
  HTTP_411_LENGTH_REQUIRED,
  HTTP_412_PRECONDITION_FAILED,
  HTTP_413_REQUEST_ENTITY_TOO_LARGE,
  HTTP_414_REQUEST_URI_TOO_LONG,
  HTTP_415_UNSUPPORTED_MEDIA_TYPE,
  HTTP_416_REQUESTED_RANGE_NOT_SATISFIABLE,
  HTTP_417_EXPECTATION_FAILED,
  HTTP_418_IM_A_TEAPOT,
  HTTP_421_MISDIRECTED_REQUEST,
  HTTP_422_UNPROCESSABLE_ENTITY,
  HTTP_423_LOCKED,
  HTTP_424_FAILED_DEPENDENCY,
  HTTP_425_TOO_EARLY,
  HTTP_426_UPGRADE_REQUIRED,
  HTTP_428_PRECONDITION_REQUIRED,
  HTTP_429_TOO_MANY_REQUESTS,
  HTTP_431_REQUEST_HEADER_FIELDS_TOO_LARGE,
  HTTP_451_UNAVAILABLE_FOR_LEGAL_REASONS,
  HTTP_500_INTERNAL_SERVER_ERROR,
  HTTP_501_NOT_IMPLEMENTED,
  HTTP_502_BAD_GATEWAY,
  HTTP_503_SERVICE_UNAVAILABLE,
  HTTP_504_GATEWAY_TIMEOUT,
  HTTP_505_HTTP_VERSION_NOT_SUPPORTED,
  HTTP_506_VARIANT_ALSO_NEGOTIATES,
  HTTP_507_INSUFFICIENT_STORAGE,
  HTTP_508_LOOP_DETECTED,
  HTTP_510_NOT_EXTENDED,
  HTTP_511_NETWORK_AUTHENTICATION_REQUIRED,
  json,
  redirect,
  set_cookie,
  sse_response,
  text,
  WS_1000_NORMAL_CLOSURE,
  WS_1001_GOING_AWAY,
  WS_1002_PROTOCOL_ERROR,
  WS_1003_UNSUPPORTED_DATA,
  WS_1005_NO_STATUS_RCVD,
  WS_1006_ABNORMAL_CLOSURE,
  WS_1007_INVALID_FRAME_PAYLOAD_DATA,
  WS_1008_POLICY_VIOLATION,
  WS_1009_MESSAGE_TOO_BIG,
  WS_1010_MANDATORY_EXT,
  WS_1011_INTERNAL_ERROR,
  WS_1012_SERVICE_RESTART,
  WS_1013_TRY_AGAIN_LATER,
  WS_1014_BAD_GATEWAY,
  WS_1015_TLS_HANDSHAKE,
}

///|
pub using @di {type Container, type Deps, type Provider, type Scope}

///|
pub using @socket {
  type WebSocket,
  type WsHandler,
  type WsMessage,
  drive_websocket,
}

///|
pub using @schema {
  trait ToSchema,
  type Constraint,
  type Field,
  type ObjectSchema,
  type OpenApiVersion,
  type Schema,
  type Unresolved,
  type ValidationError,
  check_constraints,
  filter_response,
  json_model,
  query_limits,
  schema_of,
  unprocessable,
  validate_schema,
  validation_error_body,
  with_constraints,
}

///|
pub using @ctx {
  type BackgroundTasks,
  type Context,
  type HttpBasicCredentials,
  type OAuth2PasswordRequestForm,
  parse_basic_auth,
}

///|
pub using @endpoint {
  type Endpoint,
  type Param,
  type ParamLoc,
  type ResponseSpec,
}

///|
pub using @mid {
  type CorsConfig,
  type ExceptionHandler,
  type HttpException,
  cors,
  gzip,
  http_error,
}

///|
pub using @security {
  type ApiKey,
  type ApiKeyIn,
  type AuthenticatedUser,
  type BasicAuth,
  type DigestAuth,
  type OAuth2CodeBearer,
  type OAuth2PasswordBearer,
  type SecurityRequirement,
  type SecurityScheme,
  type SecurityScopes,
  create_access_token,
  token_response,
}

///|
pub using @route {
  type ApiHandler,
  type BackgroundHandler,
  type Method,
  type Router,
  type StreamHandler,
}

///|
pub using @openapi {
  type ApiInfo,
  type Contact,
  type License,
  type Server,
  redoc_ui,
  swagger_ui,
}