Skip to content

Decoradores ​

Referencia de los atributos de corvis-swagger. Los de controlador y handler van debajo de #[controller] o de #[get]/#[post]...; los de propiedad, en los campos de un struct con #[derive(ApiSchema)]. Necesitan use corvis_swagger::*; en el archivo.

Los argumentos con nombre (summary = "...") aceptan claves en snake_case o camelCase y se convierten a camelCase en el documento. Los valores son expresiones de Rust, excepto type, que recibe un tipo (type = CatDto, type = [CatDto]) o un nombre de tipo (type = "string").

Controlador y handler ​

AtributoNivelDescripción
#[api_tags("a", "b")]Controlador, handlerTags de la operación
#[api_operation(summary, description, operation_id, deprecated, tags, external_docs)]HandlerDatos de la operación
#[api_response(status = 418, ...)]Controlador, handlerUna respuesta con cualquier código
#[api_default_response(...)]Controlador, handlerLa respuesta default
#[api_<estado>_response(...)]Controlador, handlerAtajos por código (ver abajo)
#[api_param(name = "id", ...)]Controlador, handlerParámetro de ruta
#[api_query(name = "q", ...)]Controlador, handlerParámetro de query
#[api_header(name = "X-Tenant", ...)]Controlador, handlerCabecera
#[api_headers(json!([...]))]Controlador, handlerVarias cabeceras
#[api_body(type = T, ...)]HandlerCuerpo de la petición
#[api_produces("application/pdf")]Controlador, handlerTipos MIME de las respuestas
#[api_consumes("multipart/form-data")]Controlador, handlerTipos MIME del cuerpo
#[api_bearer_auth], #[api_basic_auth], #[api_cookie_auth]Controlador, handlerRequisito de seguridad (nombre opcional)
#[api_oauth2(["scope"], "nombre")]Controlador, handlerRequisito OAuth2
#[api_security("nombre", ["scope"])]Controlador, handlerRequisito de cualquier esquema
#[api_extra_models(A, B)]Controlador, handlerModelos añadidos a components.schemas
#[api_extension("x-clave", valor)]Controlador, handlerExtensión x-...
#[api_exclude_endpoint]HandlerExcluye la operación
#[api_exclude_controller]ControladorExcluye todo el controlador
#[api_include_endpoint]HandlerIncluye la operación con only_include_decorated_endpoints

Atajos de respuesta ​

Cada uno equivale a #[api_response(status = N, ...)]:

CódigoAtributo
100-103api_continue_response, api_switching_protocols_response, api_processing_response, api_earlyhints_response
200-210api_ok_response, api_created_response, api_accepted_response, api_non_authoritative_information_response, api_no_content_response, api_reset_content_response, api_partial_content_response, api_multi_status_response, api_already_reported_response, api_content_different_response
300-308api_ambiguous_response, api_moved_permanently_response, api_found_response, api_see_other_response, api_not_modified_response, api_temporary_redirect_response, api_permanent_redirect_response
400-417api_bad_request_response, api_unauthorized_response, api_payment_required_response, api_forbidden_response, api_not_found_response, api_method_not_allowed_response, api_not_acceptable_response, api_proxy_authentication_required_response, api_request_timeout_response, api_conflict_response, api_gone_response, api_length_required_response, api_precondition_failed_response, api_payload_too_large_response, api_uri_too_long_response, api_unsupported_media_type_response, api_requested_range_not_satisfiable_response, api_expectation_failed_response
418-456api_i_am_a_teapot_response, api_misdirected_response, api_unprocessable_entity_response, api_locked_response, api_failed_dependency_response, api_precondition_required_response, api_too_many_requests_response, api_unrecoverable_error_response
500-508api_internal_server_error_response, api_not_implemented_response, api_bad_gateway_response, api_service_unavailable_response, api_gateway_timeout_response, api_http_version_not_supported_response, api_insufficient_storage_response, api_loop_detected_response

Propiedades de un modelo ​

En structs con #[derive(ApiSchema)] (ver Tipos y parámetros):

AtributoDescripción
#[api_property(...)]Opciones de la propiedad
#[api_property_optional(...)]Igual, con required: false
#[api_response_property(...)]Igual, con readOnly: true
#[api_hide_property]Excluye el campo
#[api_schema(name = "...", ...)]En el struct: nombre del schema y otras claves

Funciones ​

Algunas piezas no tienen atributo propio y se usan como funciones del módulo corvis_swagger::decorators, que devuelven un CustomDecorator. Se aplican con #[apply_decorators(...)]:

FunciónDescripción
zod_response::<Dto>(status, description)Código de estado + serialización con el schema del DTO + respuesta documentada
zod_response_array::<Dto>(status, description)Lo mismo para una lista
api_callbacks(vec![...])Callbacks de OpenAPI
rust
#[post]
#[apply_decorators(corvis_swagger::decorators::zod_response::<CatDto>(Some(201), None))]
fn create(&self, #[body] dto: CreateCatDto) -> Value { /* ... */ }

Componer decoradores ​

Como todos los atributos producen un CustomDecorator, puedes agruparlos en una función y reutilizarla:

rust
use corvis::CustomDecorator;
use corvis_swagger::decorators::{api_bearer_auth, api_status_response};

fn authenticated() -> CustomDecorator {
    CustomDecorator::new()
        .and(api_bearer_auth(None))
        .and(api_status_response(401, json!({ "description": "Missing or invalid token" })))
}

#[get("me")]
#[use_guards(AuthGuard)]
#[apply_decorators(authenticated())]
fn me(&self, user: ChatUser) -> ChatUser { user }

Ver también Decoradores personalizados.

Publicado bajo la licencia MIT.