Skip to main content

Bindings

Struct Bindings 

Source
pub struct Bindings { /* private fields */ }
Expand description

App-facing entry point for environment-backed bindings.

Construction is synchronous and only validates each configured binding’s JSON shape (see BindingsProvider::from_env_deferred); the deployment platform, cloud client configuration, and each binding’s backing client are resolved lazily, on first use. A first operation against a binding that is not configured reports BINDING_NOT_CONFIGURED before any platform resolution, so a zero-environment process still constructs and fails cleanly.

§Examples

This is the canonical usage for a Container/Daemon-shaped app (a long-running resident process that only needs bindings, with no Worker event handlers):

use alien_bindings::Bindings;
use object_store::{path::Path, PutPayload};

let bindings = Bindings::from_env()?;

let storage = bindings.storage("files").await?;
storage
    .put(&Path::from("greeting.txt"), PutPayload::from_static(b"hello"))
    .await?;

Implementations§

Source§

impl Bindings

Source

pub fn from_env() -> Result<Bindings, AlienError<ErrorData>>

Sync-constructs Bindings from the current process environment.

Source

pub fn from_env_map( env: HashMap<String, String>, ) -> Result<Bindings, AlienError<ErrorData>>

Sync-constructs Bindings from an explicit environment map instead of the process environment.

This is public for embedders that resolve bindings from a caller-supplied map rather than std::env — notably the napi addon, which merges std::env::vars() with per-call overrides before constructing Bindings. It is also what from_env delegates to and what this module’s tests use to inject ALIEN_*_BINDING variables (avoiding process-global state that’s unsafe to share across parallel tests).

Source

pub async fn storage( &self, binding_name: &str, ) -> Result<Arc<dyn Storage>, AlienError<ErrorData>>

Loads the object storage binding named binding_name.

The returned handle checks credential freshness before each operation. Native credentials and fresh short-lived credentials remain cached; a provider inside its refresh window is refreshed once under its shared resolver’s single-flight guard.

Source

pub async fn kv( &self, binding_name: &str, ) -> Result<Arc<dyn Kv>, AlienError<ErrorData>>

Loads an environment-backed key-value binding that refreshes minted credentials before use.

Source

pub async fn queue( &self, binding_name: &str, ) -> Result<BoundQueue, AlienError<ErrorData>>

Loads a queue binding that refreshes minted credentials before use.

Source

pub async fn vault( &self, binding_name: &str, ) -> Result<Arc<dyn Vault>, AlienError<ErrorData>>

Loads an environment-backed vault binding that refreshes minted credentials before use.

Source

pub async fn container( &self, binding_name: &str, ) -> Result<Arc<dyn Container>, AlienError<ErrorData>>

Loads a linked container for read-only service discovery.

Source

pub async fn postgres( &self, binding_name: &str, ) -> Result<Arc<dyn Postgres>, AlienError<ErrorData>>

Loads the connection details for a linked Postgres database.

Unlike the other kinds this returns no operations — Postgres has no gRPC service and every backend speaks the same wire protocol, so the handle carries connection details and the application connects with its own driver.

The Local and External backends carry their password inline in the binding environment variable, so their handle is resolved once and then cached.

The three cloud backends carry only a locator for their password and read it from the cloud secret store on every call — their handle is never cached. There is no refreshing wrapper, so a handle keeps the password that was current when it was created and calling this again is what picks up a rotated one. Each call is therefore one secret-store read: hold the returned handle for the lifetime of a connection pool rather than calling this per query.

Trait Implementations§

Source§

impl Debug for Bindings

Source§

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

Formats the value using the given formatter. Read more

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

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

Source§

impl<K, Q> Comparable<Q> for K
where K: Borrow<Q> + ?Sized, Q: Ord + ?Sized,

Source§

fn compare(&self, key: &Q) -> Ordering

Compare self to key and return their ordering.
Source§

impl<K, Q> Equivalent<Q> for K
where K: Borrow<Q> + ?Sized, Q: Eq + ?Sized,

Source§

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

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

impl<T> ErasedDestructor for T
where T: 'static,

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

impl<Unshared, Shared> IntoShared<Shared> for Unshared
where Shared: FromUnshared<Unshared>,

Source§

fn into_shared(self) -> Shared

Creates a shared type from an unshared type.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

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

Initializes a with the given initializer. Read more
Source§

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

Dereferences the given pointer. Read more
Source§

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

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

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

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

Source§

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

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

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

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

Source§

fn vzip(self) -> V

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