Skip to main content

ConnectBridge

Struct ConnectBridge 

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

Routes inbound platform messages to bamboo sessions, enforces the per-platform allow-list + dedup, and serializes execution per chat behind a busy lock + FIFO queue.

Implementations§

Source§

impl ConnectBridge

Source

pub fn new(ctx: ConnectContext, map_path: Option<PathBuf>) -> Self

Production constructor: wires up approvals::EngineResponder (the in-proc respond+resume path) automatically. See Self::with_responder for injecting a fake in tests.

Source

pub fn with_responder( ctx: ConnectContext, map_path: Option<PathBuf>, responder: Arc<dyn Responder>, ) -> Self

Test/advanced constructor: inject a Responder seam instead of the production EngineResponder (issue #458: “Design a small Responder seam on the bridge so tests inject a fake instead of full AppState”).

Source

pub async fn load_session_map(&self)

Loads the persisted chat -> session map from disk, if a map_path was configured. Tolerates a missing or corrupt file (starts empty, logging a warning on corruption) — a fresh/lost map degrades to “every chat starts a new session,” never a hard failure.

Source

pub async fn session_id_for_key(&self, key: &str) -> Option<String>

Source

pub async fn handle_inbound( self: Arc<Self>, platform: Arc<dyn Platform>, allow_from: Vec<String>, msg: InboundMessage, )

Entry point for every inbound platform message. Enforces allow-list + dedup, answers /stop and /status immediately (bypassing the busy queue — a queued /stop could never reach a busy chat), and otherwise either runs the message right away or queues it behind the chat’s current run.

Takes self: Arc<Self> (not &self) so it can hand the bridge off to a detached tokio::spawn for the actual (potentially long-running) execution — this method itself returns as soon as the message is either answered inline or queued, so one slow chat can never block another chat’s inbound dispatch loop.

Source

pub async fn handle_callback( self: Arc<Self>, platform: Arc<dyn Platform>, allow_from: Vec<String>, callback: CallbackQuery, )

Entry point for every inbound button-press callback (issue #458). Unlike text messages, a callback NEVER queues and NEVER starts a run — it can only ever resolve (or fail to resolve) the chat’s parked ask. Per the design constraint, the platform is ALWAYS acked (answer_callback), even for a stale/forged/non-matching one, and a non-match is dropped silently rather than ever being forwarded as user text.

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