# EasyRpc v1.0.0 - Table of Contents

> A library for wrapping RPC calls from remote nodes, allowing them to be used like local functions. It provides a simple way to expose remote functions as local APIs.

## Pages

- [Architecture](architecture.md)
- [Faq](faq.md)
- [Getting Started](getting_started.md)
- [Migration Guide](migration_guide.md)
- [Readme](readme.md)
- [Changelog](changelog.md)
- [Contributing](contributing.md)

## Modules

- [EasyRpc](EasyRpc.md): Main DSL module for EasyRpc.
- [EasyRpc.Behaviours.RpcExecutor](EasyRpc.Behaviours.RpcExecutor.md): Behaviour for RPC execution implementations.
- [EasyRpc.ConfigError](EasyRpc.ConfigError.md): Kept for backward compatibility. Delegates to `EasyRpc.Error`.
- [EasyRpc.Context](EasyRpc.Context.md): Context struct that flows through an RPC plug pipeline.
- [EasyRpc.DefRpc](EasyRpc.DefRpc.md): Declarative per-function RPC wrapper via the `defrpc` macro.
- [EasyRpc.Dsl](EasyRpc.Dsl.md): Spark DSL extension for EasyRpc.
- [EasyRpc.Dsl.Function](EasyRpc.Dsl.Function.md): Struct representing an RPC function definition in the DSL.

- [EasyRpc.Dsl.Plug](EasyRpc.Dsl.Plug.md): Struct representing a plug in the pipeline DSL.

- [EasyRpc.Info](EasyRpc.Info.md): Info module for introspecting EasyRpc DSL definitions.
- [EasyRpc.NodeSelector](EasyRpc.NodeSelector.md): Node selection strategies for distributed RPC calls.
- [EasyRpc.Pipeline](EasyRpc.Pipeline.md): Builds and executes a middleware pipeline for RPC calls.
- [EasyRpc.Plug](EasyRpc.Plug.md): Defines the contract for EasyRpc middleware plugs.
- [EasyRpc.Plugs.Cache](EasyRpc.Plugs.Cache.md): Local process-cache plug using an ETS table.
- [EasyRpc.Plugs.ErrorHandler](EasyRpc.Plugs.ErrorHandler.md): Normalises the context after execution.
- [EasyRpc.Plugs.Executor](EasyRpc.Plugs.Executor.md): Calls `:erpc.call` with the node, module, function, args, and timeout from
the context.
- [EasyRpc.Plugs.Logger](EasyRpc.Plugs.Logger.md): Logs RPC calls before execution and after completion.
- [EasyRpc.Plugs.NodeSelector](EasyRpc.Plugs.NodeSelector.md): Selects a target node and stores it in `ctx.node`.
- [EasyRpc.Plugs.Retry](EasyRpc.Plugs.Retry.md): Retries the downstream pipeline when the call fails.
- [EasyRpc.Plugs.Telemetry](EasyRpc.Plugs.Telemetry.md): Emits `:telemetry` events around RPC calls.
- [EasyRpc.RpcCall](EasyRpc.RpcCall.md): Core module for executing remote procedure calls.
- [EasyRpc.RpcError](EasyRpc.RpcError.md): Kept for backward compatibility. Delegates to `EasyRpc.Error`.
- [EasyRpc.RpcWrapper](EasyRpc.RpcWrapper.md): Configuration-driven RPC wrapper.
- [EasyRpc.Transformers.GenerateRpcFunctions](EasyRpc.Transformers.GenerateRpcFunctions.md): Transformer that generates RPC wrapper functions from DSL definitions.
- [EasyRpc.Utils.FunctionGenerator](EasyRpc.Utils.FunctionGenerator.md): Compile-time helpers for generating RPC wrapper functions.
- [EasyRpc.Verifiers.ValidateConfig](EasyRpc.Verifiers.ValidateConfig.md): Verifies that the EasyRpc DSL configuration is valid.
- [EasyRpc.WrapperConfig](EasyRpc.WrapperConfig.md): Configuration struct for RPC wrappers.

- Exceptions
  - [EasyRpc.Error](EasyRpc.Error.md): Unified error handling for EasyRpc library.

