rust-best-practices

Идиоматические стандарты кодирования Rust на основе руководства по лучшим практикам Apollo GraphQL. Охватывает девять ключевых областей: стили и идиомы кодирования, линтинг clippy, оптимизация производительности, обработка ошибок, шаблоны тестирования, обобщения и диспетчеризация, шаблон конечного автомата, документация и безопасность указателей. Уделяет особое внимание заимствованию вместо клонирования, обработке ошибок на основе Result с thiserror/anyhow и профилированию производительности с помощью релизных сборок. Включает краткое справочное руководство по шаблонам владения, избеганию паник,...

npx skills add https://github.com/apollographql/skills --skill rust-best-practices

Rust Best Practices

Apply these guidelines when writing or reviewing Rust code. Based on Apollo GraphQL's Rust Best Practices Handbook.

Best Practices Reference

Before reviewing, familiarize yourself with Apollo's Rust best practices. Read ALL relevant chapters in the same turn in parallel. Reference these files when providing feedback:

Quick Reference

Borrowing & Ownership

  • Prefer &T over .clone() unless ownership transfer is required
  • Use &str over String, &[T] over Vec<T> in function parameters
  • Small Copy types (≤24 bytes) can be passed by value
  • Use Cow<'_, T> when ownership is ambiguous

Error Handling

  • Return Result<T, E> for fallible operations; avoid panic! in production
  • Never use unwrap()/expect() outside tests
  • Use thiserror for library errors, anyhow for binaries only
  • Prefer ? operator over match chains for error propagation

Performance

  • Always benchmark with --release flag
  • Run cargo clippy -- -D clippy::perf for performance hints
  • Avoid cloning in loops; use .iter() instead of .into_iter() for Copy types
  • Prefer iterators over manual loops; avoid intermediate .collect() calls

Linting

Run regularly: cargo clippy --all-targets --all-features --locked -- -D warnings

Key lints to watch:

  • redundant_clone - unnecessary cloning
  • large_enum_variant - oversized variants (consider boxing)
  • needless_collect - premature collection

Use #[expect(clippy::lint)] over #[allow(...)] with justification comment.

Testing

  • Name tests descriptively: process_should_return_error_when_input_empty()
  • One assertion per test when possible
  • Use doc tests (///) for public API examples
  • Consider cargo insta for snapshot testing generated output

Generics & Dispatch

  • Prefer generics (static dispatch) for performance-critical code
  • Use dyn Trait only when heterogeneous collections are needed
  • Box at API boundaries, not internally

Type State Pattern

Encode valid states in the type system to catch invalid operations at compile time:

struct Connection<State> { /* ... */ _state: PhantomData<State> }
struct Disconnected;
struct Connected;

impl Connection<Connected> {
    fn send(&self, data: &[u8]) { /* only connected can send */ }
}

Documentation

  • // comments explain why (safety, workarounds, design rationale)
  • /// doc comments explain what and how for public APIs
  • Every TODO needs a linked issue: // TODO(#42): ...
  • Enable #![deny(missing_docs)] for libraries

Больше skills от apollographql

apollo-client
apollographql
Apollo Client — это комплексная библиотека управления состоянием для JavaScript, которая позволяет управлять как локальными, так и удаленными данными с помощью GraphQL. Версия 4.x предлагает улучшенное кэширование, лучшую поддержку TypeScript и совместимость с React 19.
official
apollo-client
apollographql
Полное руководство по созданию React-приложений с Apollo Client 4.x, охватывающее запросы, мутации, кэширование и управление состоянием. Поддерживает несколько React-фреймворков и конфигураций: клиентские приложения (Vite, CRA), Next.js App Router с React Server Components, React Router 7 с потоковым SSR и TanStack Start. Включает хуки для запросов (useQuery, useLazyQuery), мутаций (useMutation) и шаблоны на основе Suspense (useSuspenseQuery, useBackgroundQuery) для современных React 18+ и 19...
official
apollo-connectors
apollographql
Интеграция REST API в суперграфы GraphQL с помощью директив @source и @connect. Предоставляет структурированный 5-шаговый процесс: исследование структуры API, реализация схемы с директивами, валидация через rover supergraph compose, выполнение коннекторов и тестирование покрытия. Поддерживает настройку запросов, включая заголовки, тело запроса, пакетирование для паттернов N+1 и внедрение переменных окружения через $env. Обрабатывает сопоставление ответов с выбором полей, псевдонимами, подвыборками для вложенных данных и сущностями...
official
apollo-federation
apollographql
Apollo Federation позволяет объединять несколько GraphQL API (подграфов) в единый суперграф.
official
apollo-ios
apollographql
Apollo iOS — это строго типизированный GraphQL-клиент для платформ Apple. Он генерирует типы Swift из ваших операций и схемы GraphQL, включает асинхронный клиент с async/await, нормализованный кеш (в памяти или на основе SQLite), подключаемый HTTP-транспорт на основе перехватчиков, обрабатывающий запросы, мутации и многокомпонентные подписки, а также опциональный WebSocket-транспорт (graphql-transport-ws), поддерживающий любые типы операций.
official
apollo-kotlin
apollographql
Apollo Kotlin — это строго типизированный GraphQL-клиент, который генерирует модели Kotlin из ваших GraphQL-операций и схемы, и может использоваться в проектах Android, JVM и Kotlin Multiplatform.
official
apollo-mcp-server
apollographql
Подключает AI-агентов к GraphQL API через Model Context Protocol со встроенными инструментами интроспекции и операций. Предоставляет операции GraphQL в виде MCP-инструментов; поддерживает три источника операций: локальные файлы, коллекции GraphOS Studio и манифесты сохранённых запросов. Включает четыре инструмента интроспекции (introspect, search, validate, execute) для исследования схемы и ad-hoc тестирования запросов; режим минификации снижает использование токенов за счёт компактной записи. Настраиваемая аутентификация через статические заголовки,...
official
apollo-router
apollographql
Apollo Router — это высокопроизводительный графовый маршрутизатор, написанный на Rust для работы с суперграфами Apollo Federation 2. Он располагается перед вашими подграфами и обрабатывает планирование запросов, выполнение и композицию ответов.
official