Pular para o conteúdo principal

appcore-capabilities

Pacote publicado

Estável 1.0.0 · MSRV Rust 1.89 · crates.io · docs.rs · código-fonte

Guia e exemplos mantidos pelo crate

O repositório do Runtime mantém o guia detalhado, exemplo básico e exemplo intermediário. O wiki resume a fronteira pública; detalhes de API e execução ficam junto ao código do crate.

Responsabilidade: catalogar descritores compostos, registrar handlers locais e resolver providers locais ou remotos compatíveis.

Dependências internas: contracts, core e distributed contracts.

API principal: request/response/error, traits local handler e remote invoker, catálogo e contexto de enforcement, local provider, registry, provider selection, resolution policy, selection trait/default, resolver e invoker peer RPC baseado no contrato distribuído.

Use IDs genéricos e requisitos explícitos. O resolver considera health, mode, liderança e policy; não interpreta semântica de produto.

Use CapabilityCatalog quando a composition root precisar resolver e autorizar descritores do manifesto antes do dispatch. Use CapabilityRegistry apenas quando houver um handler local real. Catálogo e resolver compartilham enforcement de request, modo de escrita e liderança.

O resolver padrão percorre referências emprestadas de peer e descriptor, retém somente o primeiro fallback compatível e clona apenas o provider selecionado. A compatibilidade usa o descriptor já encontrado em vez de percorrer uma cópia de todos os nomes anunciados. Uma CapabilitySelectionPolicy customizada continua recebendo o slice owned completo exigido pelo trait público estável.

Use CapabilityResolver::handle_owned quando o caller não precisar mais reter o request. Policy e handlers locais continuam borrowed, mas o adapter Peer RPC transfere ID, capability, payload, chave de idempotência e trace diretamente para seu DTO de saída. Callers e invokers customizados que usam o contrato emprestado permanecem compatíveis.

A execução default de handle, handle_local e handle_owned empresta o provider do registry ou record de discovery selecionado durante enforcement e dispatch. Isso evita clonar identidade, endpoints, capabilities e metadata de um peer para uma chamada transitória. resolve() mantém seu resultado owned, e selectors customizados mantêm o contrato completo de candidatos owned.

Maturidade: perfil de roteamento estável.