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-federation
apollographql
Apollo Federation позволяет объединять несколько GraphQL API (подграфов) в единый суперграф.
apollo-ios
apollographql
Apollo iOS — это строго типизированный GraphQL-клиент для платформ Apple. Он генерирует типы Swift из ваших операций и схемы GraphQL, включает асинхронный клиент с async/await, нормализованный кеш (в памяти или на основе SQLite), подключаемый HTTP-транспорт на основе перехватчиков, обрабатывающий запросы, мутации и многокомпонентные подписки, а также опциональный WebSocket-транспорт (graphql-transport-ws), поддерживающий любые типы операций.
apollo-router
apollographql
Apollo Router — это высокопроизводительный графовый маршрутизатор, написанный на Rust для работы с суперграфами Apollo Federation 2. Он располагается перед вашими подграфами и обрабатывает планирование запросов, выполнение и композицию ответов.
apollo-router-plugin-creator
apollographql
Создание нативных плагинов на Rust для Apollo Router.
apollo-server
apollographql
Полное руководство по созданию GraphQL-серверов с Apollo Server 5.x в различных фреймворках. Охватывает определение схемы, резолверы, настройку контекста и обработку ошибок с поддержкой TypeScript. Поддерживает автономный режим для прототипирования и интеграцию с Express, Fastify, Koa, а также бессерверные среды. Включает шаблоны резолверов, аутентификацию/авторизацию, плагины, DataLoader для предотвращения N+1 и методы оптимизации производительности. Предоставляет справочную документацию по источникам данных, ошибкам...
graphql-operations
apollographql
Руководство по лучшим практикам написания эффективных, типобезопасных GraphQL-операций и их организации с помощью фрагментов. Охватывает запросы, мутации, подписки и фрагменты с соглашениями об именовании, синтаксисом переменных и использованием директив. Подчеркивает основные принципы: запрашивать только необходимые поля, именовать все операции, использовать переменные вместо жестко заданных значений и включать поля id для кэширования. Рекомендует размещать фрагменты вместе с компонентами и использовать директивы @include / @skip для условных полей...
graphql-schema
apollographql
Руководство по лучшим практикам отрасли для проектирования интуитивно понятных, производительных и поддерживаемых GraphQL-схем. Охватывает основные принципы проектирования, включая клиенто-ориентированную организацию
rover
apollographql
Apollo Rover CLI для управления схемами GraphQL, федерацией и локальной разработкой суперграфа. Публикация, получение и проверка схем подграфов; компоновка федеративных суперграфов локально или через GraphOS. Включает проверку схем (валидацию перед развёртыванием), линтинг и интроспекцию запущенных серверов. Команда rover dev запускает локальный Router с автоматической компоновкой схем для рабочих процессов разработки. Поддерживает CI/CD с проверкой перед публикацией и выводом в JSON для скриптов.