Skip to main content

Extensions

Struct Extensions 

pub struct Extensions { /* private fields */ }
Expand description

A type map of protocol extensions.

Extensions are internally stored in a type erased Arc. Since values are stored in an Arc there are extra methods exposed that build on top of this and leverage characteristics of an Arc to expose things like cheap cloning of the Arc.

Implementations§

§

impl Extensions

pub fn new() -> Extensions

Create an empty Extensions store.

pub fn insert<T>(&self, val: T) -> &T
where T: Extension,

Insert a type T into this Extensions store.

This method returns a refence to the just insert value

If the value you are inserting is an Arc<T>, prefer using Self::insert_arc() to prevent the double indirection of storing an Arc<Arc<T>>. This happens because internally we use a type erased Arc to store the actual value.

pub fn insert_arc<T>(&self, val: Arc<T>) -> Arc<T>
where T: Extension,

Insert a type Arc<T> into this [Extensions] store.

This method returns a a cloned Arc of the value just inserted

If the value you are inserting is not an Arc<T> or you don’t need a cloned Arc<T> prefer using Self::insert()

pub fn extend(&self, other: &Extensions)

Extend this Extensions store with the other Extensions.

The other Extensionss will be appended behind the current ones

pub fn contains<T>(&self) -> bool
where T: Extension,

Returns true if the Extensions store contains the given type.

pub fn get_ref<T>(&self) -> Option<&T>
where T: Extension,

Get a reference to the most recently insert item of type T, or insert in case no item was found

If an owned Arc<T> is needed prefer using Self::get_arc()

Self::get_ref will return the last added item T, in most cases this is exactly what you want, but if you need the oldest item T use Self::first_ref

pub fn get_arc<T>(&self) -> Option<Arc<T>>
where T: Extension,

Get an owned Arc<T> of the most recently insert item of type T, or insert in case no item was found

If a reference is needed prefer using Self::get_ref()

Self::get_arc will return the last added item T, in most cases this is exactly what you want, but if you need the oldest item T use Self::first_arc

pub fn get_ref_or_insert<T, F>(&self, create_fn: F) -> &T
where T: Extension, F: FnOnce() -> T,

Get a reference to the most recently insert item of type T, or insert in case no item was found

If an owned Arc<T> is needed or inserting prefer using Self::get_arc_or_insert()

pub fn get_arc_or_insert<T, F>(&self, create_fn: F) -> Arc<T>
where T: Extension, F: FnOnce() -> Arc<T>,

Get an owned Arc<T> of the most recently insert item of type T, or insert in case no item was found

If a reference is needed or the type being inserted in not an Arc<T> prefer using Self::get_ref_or_insert()

pub fn first_ref<T>(&self) -> Option<&T>
where T: Extension,

Get a shared reference to the oldest inserted item of type T

If an owned Arc<T> is needed prefer using Self::get_arc()

Self::first_ref will return the first added item T, in most cases this is not what you want, instead use Self::get_ref to get the most recently inserted item T

pub fn first_arc<T>(&self) -> Option<Arc<T>>
where T: Extension,

Get an owned Arc<T> of the oldest inserted item of type T

If a reference is needed prefer using Self::first_ref()

Self::first_arc will return the first added item T, in most cases this is not what you want, instead use Self::get_arc to get the most recently inserted item T

pub fn iter_ref<T>(&self) -> impl Iterator<Item = &T>
where T: Extension,

Iterate over all the inserted items of type T as shared references.

Items are ordered from oldest to newest.

pub fn iter_arc<T>(&self) -> impl Iterator<Item = Arc<T>>
where T: Extension,

Iterate over all the inserted items of type T as cloned Arc values.

Items are ordered from oldest to newest.

pub fn iter_all(&self) -> impl Iterator<Item = &TypeErasedExtension>

Iter over all the TypeErasedExtension

This can be used to efficiently combine different types of Extensions in only a single iteration. TypeErasedExtension exposes methods to easily convert it back to type T if it matches the erasaed type stored internally.

Trait Implementations§

§

impl Clone for Extensions

§

fn clone(&self) -> Extensions

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
§

impl Debug for Extensions

§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
§

impl Default for Extensions

§

fn default() -> Extensions

Returns the “default value” for a type. Read more
§

impl ExtensionsRef for Extensions

§

fn extensions(&self) -> &Extensions

Get reference to the underlying Extensions store
§

impl From<Extensions> for RequestExtensions

§

fn from(value: Extensions) -> RequestExtensions

Converts to this type from the input type.
§

impl FromRequest for Extensions

§

type Rejection = Infallible

If the extractor fails it’ll use this “rejection” type. A rejection is a kind of error that can be converted into a response.
§

async fn from_request( req: Request, ) -> Result<Extensions, <Extensions as FromRequest>::Rejection>

Perform the extraction.
§

impl IntoResponse for Extensions

§

fn into_response(self) -> Response

Create a response.
§

impl IntoResponseParts for Extensions

§

type Error = Infallible

The type returned in the event of an error. Read more
§

fn into_response_parts( self, res: ResponseParts, ) -> Result<ResponseParts, <Extensions as IntoResponseParts>::Error>

Set parts of the response

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> FromRef<T> for T
where T: Clone,

§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
§

impl<T> FutureExt for T

§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<R> IntoEndpointService<()> for R
where R: IntoResponse + Clone + Send + Sync + 'static,

§

impl<R, State> IntoEndpointServiceWithState<(), State> for R
where R: IntoResponse + Clone + Send + Sync + 'static,

§

type Service = StaticService<R>

§

fn into_endpoint_service_with_state( self, _state: State, ) -> <R as IntoEndpointServiceWithState<(), State>>::Service

convert the type into a rama_core::Service with state.
§

impl<T> IntoRequest<T> for T

§

fn into_request(self) -> Request<T>

Wrap the input message T in a rama_grpc::Request
§

impl<L> LayerExt<L> for L

§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in Layered.
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

impl<T> PolicyExt for T
where T: ?Sized,

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
§

impl<T, U> RamaFrom<T> for U
where U: From<T>,

§

fn rama_from(value: T) -> U

§

impl<T, U, CrateMarker> RamaInto<U, CrateMarker> for T
where U: RamaFrom<T, CrateMarker>,

§

fn rama_into(self) -> U

§

impl<T, U> RamaTryFrom<T> for U
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

§

fn rama_try_from(value: T) -> Result<U, <U as RamaTryFrom<T>>::Error>

§

impl<T, U, CrateMarker> RamaTryInto<U, CrateMarker> for T
where U: RamaTryFrom<T, CrateMarker>,

§

type Error = <U as RamaTryFrom<T, CrateMarker>>::Error

§

fn rama_try_into(self) -> Result<U, <U as RamaTryFrom<T, CrateMarker>>::Error>

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more