Skip to main content

DepScope

Enum DepScope 

Source
pub enum DepScope {
    Shared,
    PerWorker,
    Cloneable,
    Hosted,
    HostedRpc,
}
Expand description

Sharing strategy declared on a #[test_dep]. Controls how the dependency interacts with output capturing and parallel test execution.

See book/src/design/sharing-strategy.md for the full description.

Variants§

§

Shared

Today’s behaviour: a single materialized instance shared by every test. Forces single-threaded execution when output capturing is on, because the Arc<dyn Any> cannot cross the parent/worker process boundary.

§

PerWorker

Each worker child materializes its own instance independently. Tests inside one worker share the instance.

§

Cloneable

Parent runs the constructor once and produces wire bytes; each worker reconstructs a local instance from those bytes via the registered worker reconstructor (worker_fn).

§

Hosted

Owner runs once in the parent test runner process and stays alive for the entire suite. The parent produces a descriptor (via HostedDep::descriptor) and ships those descriptor bytes to every worker. Each worker reconstructs a handle via HostedDep::from_descriptor. The owner is held in the parent process so singleton services (TCP listeners, Docker containers, gRPC server clients, env-based runtimes) are not duplicated per worker.

§

HostedRpc

Like Self::Hosted, but the owner stays in the parent AND workers talk back to it via the runtime’s built-in RPC layer instead of reaching out via their own transport. The dep implementor provides a HostedRpcDep impl (sync owners) — or, under the tokio feature, an AsyncHostedRpcDep impl (async owners) — on the owner type with a stub type, a method dispatch function, and a stub builder.

Implementations§

Source§

impl DepScope

Source

pub fn requires_single_thread_when_capturing(&self) -> bool

Returns true for scopes that materialize in the parent process and therefore force single-threaded fallback when capturing is on.

Source

pub fn parent_must_materialize_under_spawn_workers(&self) -> bool

Returns true for scopes the parent should still materialize even when it is otherwise delegating dependency construction to workers (i.e. skip_creating_dependencies is set). Cloneable deps need the parent to compute the wire form; Hosted / HostedRpc deps need the parent to hold the owner alive for the whole suite.

Trait Implementations§

Source§

impl Clone for DepScope

Source§

fn clone(&self) -> DepScope

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
Source§

impl Debug for DepScope

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Default for DepScope

Source§

fn default() -> DepScope

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

impl Hash for DepScope

Source§

fn hash<__H>(&self, state: &mut __H)
where __H: Hasher,

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for DepScope

Source§

fn eq(&self, other: &DepScope) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for DepScope

Source§

impl Eq for DepScope

Source§

impl StructuralPartialEq for DepScope

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
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<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> 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> TryClone for T
where T: Clone,

Source§

fn try_clone(&self) -> Result<T, Error>

Clones self, possibly returning an error.
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.