Skip to main content

Stream

Struct Stream 

Source
pub struct Stream {
    pub client: Client,
}
Expand description

Manages WebSocket streaming connections to the Limitless Exchange.

Connects to wss://ws.limitless.exchange/socket.io/?EIO=4&transport=websocket and handles the Socket.IO protocol (Engine.IO v4 + Socket.IO) over the raw WebSocket transport.

§Event Reference

Client → Server (emit)AuthDescription
subscribe_market_pricesNoAMM prices + CLOB orderbook
subscribe_positionsYesPortfolio position updates
subscribe_order_eventsYesOME + settlement lifecycle
subscribe_market_lifecycleNoMarket creation / resolution
Server → Client (on)AuthDescription
newPriceDataNoAMM price update
orderbookUpdateNoCLOB orderbook snapshot
positionsYesPosition balance change
orderEventYesOME state or settlement result
marketCreatedNoNew market funded and visible
marketResolvedNoMarket resolved with winning outcome
systemSystem notifications
authenticatedYesAuth confirmation
exceptionError notifications

Fields§

§client: Client

Implementations§

Source§

impl Stream

Source

pub async fn ws_ping(&self) -> Result<(), LimitlessError>

Tests connectivity by performing the full Socket.IO handshake.

Connects, reads the Engine.IO open packet, sends namespace connect, and verifies the server acknowledges it.

Source

pub async fn ws_subscribe<F>(&self, handler: F) -> Result<(), LimitlessError>
where F: FnMut(Value) -> Result<(), LimitlessError> + 'static + Send,

Subscribe to a public data stream with an event handler callback.

The handler receives a Value that is an array [event_name, payload] for Socket.IO events, or the raw parsed JSON for other messages.

§Example
use limitless::prelude::*;

#[tokio::main]
async fn main() {
    let stream: Stream = Limitless::new(None, None);
    stream
        .ws_subscribe(|event| {
            println!("Received: {:?}", event);
            Ok(())
        })
        .await
        .unwrap();
}
Source

pub async fn ws_subscribe_with_commands<F>( &self, cmd_receiver: UnboundedReceiver<String>, handler: F, ) -> Result<(), LimitlessError>
where F: FnMut(Value) -> Result<(), LimitlessError> + 'static + Send,

Subscribe to a stream with dynamic command support.

Allows emitting subscription commands (subscribe/unsubscribe) after the connection is established. Commands should be complete Socket.IO frames (e.g., 42/markets,["subscribe_market_prices",{...}]).

Use frame_socketio_event to build properly framed commands.

Source

pub async fn ws_subscribe_market<F>( &self, market_slug: &str, handler: F, ) -> Result<(), LimitlessError>
where F: FnMut(&str, &Value) -> Result<(), LimitlessError> + 'static + Send,

Subscribe to market updates for a specific slug.

Handles the full lifecycle: connect, handshake, subscribe, and event dispatch. The handler receives [event_name, payload] arrays.

§Example
use limitless::prelude::*;

#[tokio::main]
async fn main() {
    let ws: Stream = Limitless::new(None, None);
    ws.ws_subscribe_market("btc-above-100k", |event_name, payload| {
        println!("{event_name}: {payload}");
        Ok(())
    }).await.unwrap();
}
Source

pub async fn ws_subscribe_events<F>( &self, handler: F, ) -> Result<(), LimitlessError>
where F: FnMut(WsEventKind) -> Result<(), LimitlessError> + 'static + Send,

Subscribe to the WebSocket event stream and receive typed WsEventKind events.

Connects, performs the Socket.IO handshake, then enters an event loop that parses every incoming server event through deserialize_event before passing the resulting WsEventKind to handler.

§Example
use limitless::prelude::*;

#[tokio::main]
async fn main() {
    let ws: Stream = Limitless::new(None, None);
    ws.ws_subscribe_events(|event| {
        match event {
            WsEventKind::NewPriceData(p) => println!("AMM prices for {}", p.market_address),
            WsEventKind::TradeEvent(t) => println!("Trade: {} @ {}", t.size, t.price),
            WsEventKind::Unknown(payload) => println!("Unknown: {payload:?}"),
            other => println!("Event: {other:?}"),
        }
        Ok(())
    }).await.unwrap();
}

Trait Implementations§

Source§

impl Clone for Stream

Source§

fn clone(&self) -> Stream

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 Limitless for Stream

Source§

fn new(api_key: Option<String>, secret: Option<String>) -> Self

Create a new manager instance with optional API key and secret. Read more
Source§

fn new_with_config( config: &Config, api_key: Option<String>, secret: Option<String>, ) -> Self

Create a new manager instance with a custom Config.

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

Source§

type Output = T

Should always be Self
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, 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