Skip to main content

ProfileEmulateLayer

Struct ProfileEmulateLayer 

pub struct ProfileEmulateLayer<P = Arc<UserAgentDatabase>> { /* private fields */ }
Available on crate features std and ua only.
Expand description

Select a captured profile and publish its immutable emulation context.

Requests without an explicit RequestInitiator select a top-level navigation flow. Missing Sec-Fetch-* headers do not constrain selection; the chosen captured navigation supplies its profile-owned Fetch metadata.

The selected identity follows the configured ProfileSelector, completed by a UserAgent request extension or, with auto-detection, the request’s own User-Agent header.

A request keeps parts of its own identity with the PreserveHeaderUserAgent and PreserveClientHints extensions, or a UserAgent extension whose HTTP or TLS agent is Preserve. Each kept part is listed in the request’s ProfilePreservationReport and never fails the request.

Implementations§

§

impl<P> ProfileEmulateLayer<P>

pub fn new(source: P) -> ProfileEmulateLayer<P>

pub fn with_selector(self, selector: ProfileSelector) -> ProfileEmulateLayer<P>

Restrict captured profile selection.

pub fn set_selector( &mut self, selector: ProfileSelector, ) -> &mut ProfileEmulateLayer<P>

Restrict captured profile selection.

pub fn maybe_with_seed( self, seed: Option<ProfileSeed>, ) -> ProfileEmulateLayer<P>

Fix the profile seed for reproducible selection.

pub fn maybe_set_seed( &mut self, seed: Option<ProfileSeed>, ) -> &mut ProfileEmulateLayer<P>

Fix the profile seed for reproducible selection.

pub fn with_seed(self, seed: ProfileSeed) -> ProfileEmulateLayer<P>

Fix the profile seed for reproducible selection.

pub fn set_seed(&mut self, seed: ProfileSeed) -> &mut ProfileEmulateLayer<P>

Fix the profile seed for reproducible selection.

pub fn without_seed(self) -> ProfileEmulateLayer<P>

Fix the profile seed for reproducible selection.

pub fn unset_seed(&mut self) -> &mut ProfileEmulateLayer<P>

Fix the profile seed for reproducible selection.

pub fn maybe_with_connection_key( self, key: Option<DrawKey>, ) -> ProfileEmulateLayer<P>

Fix the logical connection draw key.

pub fn maybe_set_connection_key( &mut self, key: Option<DrawKey>, ) -> &mut ProfileEmulateLayer<P>

Fix the logical connection draw key.

pub fn with_connection_key(self, key: DrawKey) -> ProfileEmulateLayer<P>

Fix the logical connection draw key.

pub fn set_connection_key( &mut self, key: DrawKey, ) -> &mut ProfileEmulateLayer<P>

Fix the logical connection draw key.

pub fn without_connection_key(self) -> ProfileEmulateLayer<P>

Fix the logical connection draw key.

pub fn unset_connection_key(&mut self) -> &mut ProfileEmulateLayer<P>

Fix the logical connection draw key.

pub fn maybe_with_request_key( self, key: Option<DrawKey>, ) -> ProfileEmulateLayer<P>

Fix the logical request draw key.

pub fn maybe_set_request_key( &mut self, key: Option<DrawKey>, ) -> &mut ProfileEmulateLayer<P>

Fix the logical request draw key.

pub fn with_request_key(self, key: DrawKey) -> ProfileEmulateLayer<P>

Fix the logical request draw key.

pub fn set_request_key(&mut self, key: DrawKey) -> &mut ProfileEmulateLayer<P>

Fix the logical request draw key.

pub fn without_request_key(self) -> ProfileEmulateLayer<P>

Fix the logical request draw key.

pub fn unset_request_key(&mut self) -> &mut ProfileEmulateLayer<P>

Fix the logical request draw key.

pub fn with_pins(self, pins: VariantPins) -> ProfileEmulateLayer<P>

Pin stored connection and request variants.

pub fn set_pins(&mut self, pins: VariantPins) -> &mut ProfileEmulateLayer<P>

Pin stored connection and request variants.

pub fn with_is_optional(self, optional: bool) -> ProfileEmulateLayer<P>

Pass requests through unchanged, with a debug trace, when they cannot be emulated instead of failing them.

pub fn set_is_optional(&mut self, optional: bool) -> &mut ProfileEmulateLayer<P>

Pass requests through unchanged, with a debug trace, when they cannot be emulated instead of failing them.

pub fn with_try_auto_detect_user_agent( self, detect: bool, ) -> ProfileEmulateLayer<P>

Derive the UserAgent from the request’s User-Agent header when no UserAgent extension is present, so a client is emulated as itself.

pub fn set_try_auto_detect_user_agent( &mut self, detect: bool, ) -> &mut ProfileEmulateLayer<P>

Derive the UserAgent from the request’s User-Agent header when no UserAgent extension is present, so a client is emulated as itself.

pub fn with_select_fallback( self, fallback: ProfileSelectFallback, ) -> ProfileEmulateLayer<P>

Choose how to relax the selector when no profile matches it.

pub fn set_select_fallback( &mut self, fallback: ProfileSelectFallback, ) -> &mut ProfileEmulateLayer<P>

Choose how to relax the selector when no profile matches it.

pub fn maybe_with_input_header_order( self, name: Option<HeaderName>, ) -> ProfileEmulateLayer<P>

Name a request header holding a comma-separated list of header names.

Caller headers the profile does not own are emitted in that order, ahead of other caller headers. The header itself is removed from the request.

pub fn maybe_set_input_header_order( &mut self, name: Option<HeaderName>, ) -> &mut ProfileEmulateLayer<P>

Name a request header holding a comma-separated list of header names.

Caller headers the profile does not own are emitted in that order, ahead of other caller headers. The header itself is removed from the request.

pub fn with_input_header_order(self, name: HeaderName) -> ProfileEmulateLayer<P>

Name a request header holding a comma-separated list of header names.

Caller headers the profile does not own are emitted in that order, ahead of other caller headers. The header itself is removed from the request.

pub fn set_input_header_order( &mut self, name: HeaderName, ) -> &mut ProfileEmulateLayer<P>

Name a request header holding a comma-separated list of header names.

Caller headers the profile does not own are emitted in that order, ahead of other caller headers. The header itself is removed from the request.

pub fn without_input_header_order(self) -> ProfileEmulateLayer<P>

Name a request header holding a comma-separated list of header names.

Caller headers the profile does not own are emitted in that order, ahead of other caller headers. The header itself is removed from the request.

pub fn unset_input_header_order(&mut self) -> &mut ProfileEmulateLayer<P>

Name a request header holding a comma-separated list of header names.

Caller headers the profile does not own are emitted in that order, ahead of other caller headers. The header itself is removed from the request.

Trait Implementations§

§

impl<P> Clone for ProfileEmulateLayer<P>
where P: Clone,

§

fn clone(&self) -> ProfileEmulateLayer<P>

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
§

impl<P> Debug for ProfileEmulateLayer<P>
where P: Debug,

§

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

Formats the value using the given formatter. Read more
§

impl<S, P> Layer<S> for ProfileEmulateLayer<P>
where P: Clone,

§

type Service = ProfileEmulateService<S, P>

The service produced by the layer.
§

fn layer(&self, inner: S) -> <ProfileEmulateLayer<P> as Layer<S>>::Service

Wrap the given service with the middleware, returning a new service.
§

fn into_layer(self, inner: S) -> <ProfileEmulateLayer<P> as Layer<S>>::Service

Same as layer but consuming self after the service was created. Read more

Auto Trait Implementations§

§

impl<P = Arc<UserAgentDatabase>> !Freeze for ProfileEmulateLayer<P>

§

impl<P> RefUnwindSafe for ProfileEmulateLayer<P>
where P: RefUnwindSafe,

§

impl<P> Send for ProfileEmulateLayer<P>
where P: Send,

§

impl<P> Sync for ProfileEmulateLayer<P>
where P: Sync,

§

impl<P> Unpin for ProfileEmulateLayer<P>
where P: Unpin,

§

impl<P> UnsafeUnpin for ProfileEmulateLayer<P>
where P: UnsafeUnpin,

§

impl<P> UnwindSafe for ProfileEmulateLayer<P>
where P: UnwindSafe,

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
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

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<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: Sized + 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: Sized + 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>

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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 = !

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

fn try_from(value: U) -> Result<T, !>

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<V, F> ValueFormatter<&V> for F
where F: ValueFormatter<V> + ?Sized, V: ?Sized,

§

const SHAPE: FieldShape<'static>

Available on non-metrique_require_explicit_impls only.
The shape of values produced by this formatter. Read more
§

fn format_value(writer: impl ValueWriter, value: &&V)

Write value to writer
§

impl<V, F> ValueFormatter<Arc<V>> for F
where F: ValueFormatter<V> + ?Sized, V: ?Sized,

§

const SHAPE: FieldShape<'static>

Available on non-metrique_require_explicit_impls only.
The shape of values produced by this formatter. Read more
§

fn format_value(writer: impl ValueWriter, value: &Arc<V>)

Write value to writer
§

impl<V, F> ValueFormatter<Box<V>> for F
where F: ValueFormatter<V> + ?Sized, V: ?Sized,

§

const SHAPE: FieldShape<'static>

Available on non-metrique_require_explicit_impls only.
The shape of values produced by this formatter. Read more
§

fn format_value(writer: impl ValueWriter, value: &Box<V>)

Write value to writer
§

impl<V, F> ValueFormatter<Cow<'_, V>> for F
where V: ToOwned + ?Sized, F: ValueFormatter<V> + ?Sized,

§

const SHAPE: FieldShape<'static>

Available on non-metrique_require_explicit_impls only.
The shape of values produced by this formatter. Read more
§

fn format_value(writer: impl ValueWriter, value: &Cow<'_, V>)

Write value to writer
§

impl<V, F> ValueFormatter<Option<V>> for F
where F: ValueFormatter<V> + ?Sized,

§

const SHAPE: FieldShape<'static>

Available on non-metrique_require_explicit_impls only.
The shape of values produced by this formatter. Read more
§

fn format_value(writer: impl ValueWriter, value: &Option<V>)

Write value to writer
§

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