pub struct Route {
pub method: Method,
pub path: String,
pub handler_name: String,
pub request_validator: Option<Arc<SchemaValidator>>,
pub response_validator: Option<Arc<SchemaValidator>>,
pub parameter_validator: Option<ParameterValidator>,
pub file_params: Option<Value>,
pub is_async: bool,
pub cors: Option<CorsConfig>,
pub expects_json_body: bool,
pub jsonrpc_method: Option<JsonRpcMethodInfo>,
}Expand description
Route definition with compiled validators
Validators are Arc-wrapped to enable cheap cloning across route instances and to support schema deduplication via SchemaRegistry.
The jsonrpc_method field is optional and has zero overhead when None,
enabling routes to optionally expose themselves as JSON-RPC methods.
Fields§
§method: Method§path: String§handler_name: String§request_validator: Option<Arc<SchemaValidator>>§response_validator: Option<Arc<SchemaValidator>>§parameter_validator: Option<ParameterValidator>§file_params: Option<Value>§is_async: bool§cors: Option<CorsConfig>§expects_json_body: boolPrecomputed flag: true if this route expects a JSON request body Used by middleware to validate Content-Type headers
jsonrpc_method: Option<JsonRpcMethodInfo>Optional JSON-RPC method information When present, this route can be exposed as a JSON-RPC method
Implementations§
Source§impl Route
impl Route
Sourcepub fn from_metadata(
metadata: RouteMetadata,
registry: &SchemaRegistry,
) -> Result<Route, String>
pub fn from_metadata( metadata: RouteMetadata, registry: &SchemaRegistry, ) -> Result<Route, String>
Create a route from metadata, using schema registry for deduplication
Auto-generates parameter schema from type hints in the path if no explicit schema provided.
Type hints like /items/{id:uuid} generate appropriate JSON Schema validation.
Explicit parameter_schema overrides auto-generated schemas.
The schema registry ensures each unique schema is compiled only once, improving startup performance and memory usage for applications with many routes.
Sourcepub fn with_jsonrpc_method(self, info: JsonRpcMethodInfo) -> Route
pub fn with_jsonrpc_method(self, info: JsonRpcMethodInfo) -> Route
Builder method to attach JSON-RPC method info to a route
This is a convenient way to add JSON-RPC metadata after route creation. It consumes the route and returns a new route with the metadata attached.
§Examples
let route = Route::from_metadata(metadata, ®istry)?
.with_jsonrpc_method(JsonRpcMethodInfo {
method_name: "user.create".to_string(),
description: Some("Creates a new user".to_string()),
params_schema: Some(request_schema),
result_schema: Some(response_schema),
deprecated: false,
tags: vec!["users".to_string()],
});Sourcepub fn is_jsonrpc_method(&self) -> bool
pub fn is_jsonrpc_method(&self) -> bool
Check if this route has JSON-RPC metadata
Sourcepub fn jsonrpc_method_name(&self) -> Option<&str>
pub fn jsonrpc_method_name(&self) -> Option<&str>
Get the JSON-RPC method name if present
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Route
impl !RefUnwindSafe for Route
impl Send for Route
impl Sync for Route
impl Unpin for Route
impl !UnwindSafe for Route
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::RequestSource§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);