Skip to main content

Inlined

Struct Inlined 

Source
pub struct Inlined;
Expand description

Pick an inlined Kamaji backend from a caller-supplied preference list.

prefer is walked in order; the first backend whose probe came back available is selected, the matching factory is invoked, and the resulting trait object is returned. If none of the preferred backends are available, the function returns the probe error for the last entry in the preference list (its install hint is what the caller most wanted).

§Example shape

ⓘ
let availability = BackendAvailability::probe().await;
let kamaji = Inlined::pick(
    &availability,
    &[Backend::Docker, Backend::Containerd],
    |backend| match backend {
        Backend::Docker => Ok(Arc::new(docker::DockerRuntime::new()) as Arc<dyn Kamaji>),
        Backend::Containerd => Ok(Arc::new(containerd::ContainerdRuntime::connect_at(socket).await?) as _),
        Backend::Native => unreachable!("not in preference list"),
    },
)?;

The factory closure is invoked only for the selected backend, so callers can construct backends that themselves require I/O without paying for the ones they don’t pick.

Implementations§

Source§

impl Inlined

Source

pub fn pick<F>( availability: &BackendAvailability, prefer: &[Backend], factory: F, ) -> Result<Arc<dyn Kamaji>, BackendUnavailable>
where F: FnOnce(Backend) -> Arc<dyn Kamaji>,

Walk prefer in order and return the first available backend.

The factory is invoked exactly once with the chosen backend tag. Returns BackendUnavailable for the last preferred backend if none are available (callers who prefer Docker but accept Containerd see the Docker install hint).

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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

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

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

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> Same for T

Source§

type Output = T

Should always be Self
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.
Source§

impl<T> WithSubscriber for T

Source§

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

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

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