pub struct Tx<T: 'static> {
pub conn_id: ConnectionId,
pub channel_id: ChannelId,
pub sender: SenderSlot,
pub driver_tx: DriverTxSlot,
/* private fields */
}Expand description
Tx stream handle - caller sends data to callee.
r[impl channeling.caller-pov] - From caller’s perspective, Tx means “I send”. r[impl channeling.type] - Serializes as u64 stream ID on wire. r[impl channeling.holder-semantics] - The holder sends on this stream. r[impl channeling.channels-outlive-response] - Tx streams may outlive Response. r[impl channeling.lifecycle.immediate-data] - Can send Data before Response. r[impl channeling.lifecycle.speculative] - Early Data may be wasted on error.
§Facet Implementation
Uses #[facet(proxy = u64)] so that:
channel_idis pokeable (Connection can walk args and set stream IDs)- Serializes as just a
u64on the wire Tis exposed as a type parameter for codegen introspection
§Two modes of operation
- Client side:
senderholds a channel to an intermediate drain task.ConnectionHandle::calltakes the receiver and drains it to wire. - Server side:
task_txholds a direct channel to the connection driver.ChannelRegistry::bind_streamssets this, andsend()writesDriverMessage::Data.
Fields§
§conn_id: ConnectionIdThe connection ID this stream belongs to.
channel_id: ChannelIdThe unique stream ID for this stream. Public so Connection can poke it when binding streams.
sender: SenderSlotChannel sender for outgoing data (client-side mode).
Used when Tx is created via roam::channel().
driver_tx: DriverTxSlotDirect driver message sender (server-side mode).
Used when Tx is hydrated by ChannelRegistry::bind_streams.
Implementations§
Source§impl<T: 'static> Tx<T>
impl<T: 'static> Tx<T>
Sourcepub fn new(channel_id: ChannelId, tx: Sender<Vec<u8>>) -> Self
pub fn new(channel_id: ChannelId, tx: Sender<Vec<u8>>) -> Self
Create a new Tx stream with the given ID and sender channel (client-side mode).
Sourcepub fn unbound(tx: Sender<Vec<u8>>) -> Self
pub fn unbound(tx: Sender<Vec<u8>>) -> Self
Create an unbound Tx with a sender but channel_id 0.
Used by roam::channel() to create a pair before binding.
Connection will poke the channel_id and conn_id when binding.
Sourcepub fn bound(
conn_id: ConnectionId,
channel_id: ChannelId,
tx: Sender<Vec<u8>>,
driver_tx: Sender<DriverMessage>,
) -> Self
pub fn bound( conn_id: ConnectionId, channel_id: ChannelId, tx: Sender<Vec<u8>>, driver_tx: Sender<DriverMessage>, ) -> Self
Create a bound Tx with conn_id, channel_id and driver_tx already set.
Used by roam::channel() when called during dispatch to create
response channels that can send Data directly over the wire.
Sourcepub fn channel_id(&self) -> ChannelId
pub fn channel_id(&self) -> ChannelId
Get the stream ID.
Sourcepub async fn send(&self, value: &T) -> Result<(), TxError>where
T: Facet<'static>,
pub async fn send(&self, value: &T) -> Result<(), TxError>where
T: Facet<'static>,
Send a value on this stream.
r[impl channeling.data] - Data messages carry serialized values.
Works in two modes:
- Client-side (or passthrough): sends raw bytes to intermediate channel (drained by connection)
- Server-side: sends
DriverMessage::Datadirectly to connection driver
IMPORTANT: We prefer sender over driver_tx because when a channel created during dispatch is passed to a callback, the rx gets a NEW channel_id allocated by the caller’s bind_streams. The drain task uses that new channel_id, while self.channel_id still has the old dispatch-context channel_id. By using sender, data flows through the drain task which uses the correct channel_id.
Trait Implementations§
Source§impl<T: 'static> Drop for Tx<T>
When a Tx is dropped, send a Close message.
impl<T: 'static> Drop for Tx<T>
When a Tx is dropped, send a Close message.
r[impl channeling.close] - Close terminates the stream.
The Close path depends on how data was sent:
- If sender is present: data went through drain task, drain task sends Close when channel closes
- If only driver_tx is present: data went directly to driver, we send Close via driver_tx
Source§impl<T: 'static> TryFrom<&Tx<T>> for u64
Serialization: &Tx<T> -> u64 (extracts channel_id)
impl<T: 'static> TryFrom<&Tx<T>> for u64
Serialization: &Tx<T> -> u64 (extracts channel_id)
Uses TryFrom rather than From because facet’s proxy mechanism requires TryFrom.
Auto Trait Implementations§
impl<T> Freeze for Tx<T>
impl<T> RefUnwindSafe for Tx<T>where
T: RefUnwindSafe,
impl<T> Send for Tx<T>where
T: Send,
impl<T> Sync for Tx<T>where
T: Sync,
impl<T> Unpin for Tx<T>where
T: Unpin,
impl<T> UnwindSafe for Tx<T>where
T: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<'a, T> FacetPretty<'a> for Twhere
T: Facet<'a>,
impl<'a, T> FacetPretty<'a> for Twhere
T: Facet<'a>,
Source§fn pretty(&self) -> PrettyDisplay<'a, '_, T>
fn pretty(&self) -> PrettyDisplay<'a, '_, T>
Source§fn pretty_with(&self, printer: PrettyPrinter) -> PrettyDisplay<'a, '_, T>
fn pretty_with(&self, printer: PrettyPrinter) -> PrettyDisplay<'a, '_, T>
Source§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more