| Crates.io | ash-rpc-contrib |
| lib.rs | ash-rpc-contrib |
| version | 3.3.0 |
| created_at | 2025-11-17 20:43:30.134281+00 |
| updated_at | 2026-01-23 22:57:31.471875+00 |
| description | Contributed JSON-RPC methods and utilities for ash-rpc |
| homepage | https://github.com/gntem/ash-rpc |
| repository | https://github.com/gntem/ash-rpc |
| max_upload_size | |
| id | 1937459 |
| size | 85,682 |
Contributed JSON-RPC transport implementations and utilities for ash-rpc.
This package extends ash-rpc-core with additional transport layers and utilities:
observable_setup!Add the contrib package with desired features:
# Basic transport
cargo add ash-rpc-contrib --features axum,healthcheck
# With observability
cargo add ash-rpc-contrib --features axum,healthcheck,observability
# Or individual observability features
cargo add ash-rpc-contrib --features axum,logging,prometheus
Available features:
axum - HTTP transport using Axum web frameworkhealthcheck - Health check method for service monitoringtower - Tower middleware integrationlogging - Trait-based structured logging with slogprometheus - Prometheus metrics collectionopentelemetry - OpenTelemetry distributed tracingobservability - All observability features (logging + prometheus + opentelemetry)The easiest way to initialize observability:
use ash_rpc_contrib::observable_setup;
let observability = observable_setup! {
service_name: "my-rpc-service",
metrics_prefix: "my_app",
otlp_endpoint: "http://jaeger:4317",
};
// Access components
let logger = observability.logger();
let metrics = observability.metrics();
For more control, build components individually:
use ash_rpc_contrib::{
TracingLogger, PrometheusMetrics, TracingProcessor,
ObservableProcessor
};
use std::sync::Arc;
// Create logger
let logger = Arc::new(TracingLogger::new());
// Create metrics collector
let metrics = Arc::new(
PrometheusMetrics::with_prefix("my_app")
.expect("Failed to create metrics")
);
// Create tracing processor
let tracer = Arc::new(TracingProcessor::new("my-service"));
// Wrap your message processor with observability
let processor = Arc::new(your_message_processor);
let observable = ObservableProcessor::builder(processor)
.with_logger(logger)
.with_metrics(metrics)
.with_tracing(tracer)
.build();
Each observability component is independently optional:
// Logging only
#[cfg(feature = "logging")]
use ash_rpc_contrib::{Logger, TracingLogger};
// Metrics only
#[cfg(feature = "prometheus")]
use ash_rpc_contrib::PrometheusMetrics;
// Tracing only
#[cfg(feature = "opentelemetry")]
use ash_rpc_contrib::TracingProcessor;
This package is designed to work seamlessly with ash-rpc-core. Import both packages in your application:
use ash_rpc_core::*;
use ash_rpc_contrib::*;
Licensed under the Apache License, Version 2.0