pub struct HyperliquidWebSocketClient { /* private fields */ }Expand description
Hyperliquid WebSocket client following the BitMEX pattern.
Orchestrates WebSocket connection and subscriptions using a command-based architecture, where the inner FeedHandler owns the WebSocketClient and handles all I/O.
Implementations§
Source§impl HyperliquidWebSocketClient
impl HyperliquidWebSocketClient
Sourcepub fn new(
url: Option<String>,
testnet: bool,
product_type: HyperliquidProductType,
account_id: Option<AccountId>,
) -> Self
pub fn new( url: Option<String>, testnet: bool, product_type: HyperliquidProductType, account_id: Option<AccountId>, ) -> Self
Creates a new Hyperliquid WebSocket client without connecting.
If url is None, the appropriate URL will be determined based on the testnet flag:
testnet=false:wss://api.hyperliquid.xyz/wstestnet=true:wss://api.hyperliquid-testnet.xyz/ws
The connection will be established when connect() is called.
Sourcepub async fn connect(&mut self) -> Result<()>
pub async fn connect(&mut self) -> Result<()>
Establishes WebSocket connection and spawns the message handler.
Sourcepub async fn disconnect(&mut self) -> Result<()>
pub async fn disconnect(&mut self) -> Result<()>
Disconnects the WebSocket connection.
Sourcepub async fn subscribe_order_updates(&self, user: &str) -> Result<()>
pub async fn subscribe_order_updates(&self, user: &str) -> Result<()>
Subscribe to order updates for a specific user address.
Sourcepub async fn subscribe_user_events(&self, user: &str) -> Result<()>
pub async fn subscribe_user_events(&self, user: &str) -> Result<()>
Subscribe to user events (fills, funding, liquidations) for a specific user address.
Sourcepub async fn subscribe_all_user_channels(&self, user: &str) -> Result<()>
pub async fn subscribe_all_user_channels(&self, user: &str) -> Result<()>
Subscribe to all user channels (order updates + user events) for convenience.
Sourcepub async fn subscribe_trades(&self, instrument_id: InstrumentId) -> Result<()>
pub async fn subscribe_trades(&self, instrument_id: InstrumentId) -> Result<()>
Subscribe to trades for an instrument.
Sourcepub async fn unsubscribe_trades(
&self,
instrument_id: InstrumentId,
) -> Result<()>
pub async fn unsubscribe_trades( &self, instrument_id: InstrumentId, ) -> Result<()>
Unsubscribe from trades for an instrument.
Sourcepub async fn subscribe_quotes(&self, instrument_id: InstrumentId) -> Result<()>
pub async fn subscribe_quotes(&self, instrument_id: InstrumentId) -> Result<()>
Subscribe to best bid/offer (BBO) quotes for an instrument.
Sourcepub async fn unsubscribe_quotes(
&self,
instrument_id: InstrumentId,
) -> Result<()>
pub async fn unsubscribe_quotes( &self, instrument_id: InstrumentId, ) -> Result<()>
Unsubscribe from quote ticks for an instrument.
Sourcepub async fn subscribe_book(&self, instrument_id: InstrumentId) -> Result<()>
pub async fn subscribe_book(&self, instrument_id: InstrumentId) -> Result<()>
Subscribe to L2 order book for an instrument.
Sourcepub async fn unsubscribe_book(&self, instrument_id: InstrumentId) -> Result<()>
pub async fn unsubscribe_book(&self, instrument_id: InstrumentId) -> Result<()>
Unsubscribe from L2 order book for an instrument.
Sourcepub async fn subscribe_bars(&self, bar_type: BarType) -> Result<()>
pub async fn subscribe_bars(&self, bar_type: BarType) -> Result<()>
Subscribe to candle/bar data for a specific coin and interval.
Sourcepub async fn unsubscribe_bars(&self, bar_type: BarType) -> Result<()>
pub async fn unsubscribe_bars(&self, bar_type: BarType) -> Result<()>
Unsubscribe from candle/bar data.
Sourcepub async fn subscribe_mark_prices(
&self,
instrument_id: InstrumentId,
) -> Result<()>
pub async fn subscribe_mark_prices( &self, instrument_id: InstrumentId, ) -> Result<()>
Subscribe to mark price updates for an instrument.
Sourcepub async fn unsubscribe_mark_prices(
&self,
instrument_id: InstrumentId,
) -> Result<()>
pub async fn unsubscribe_mark_prices( &self, instrument_id: InstrumentId, ) -> Result<()>
Unsubscribe from mark price updates for an instrument.
Sourcepub async fn subscribe_index_prices(
&self,
instrument_id: InstrumentId,
) -> Result<()>
pub async fn subscribe_index_prices( &self, instrument_id: InstrumentId, ) -> Result<()>
Subscribe to index/oracle price updates for an instrument.
Sourcepub async fn unsubscribe_index_prices(
&self,
instrument_id: InstrumentId,
) -> Result<()>
pub async fn unsubscribe_index_prices( &self, instrument_id: InstrumentId, ) -> Result<()>
Unsubscribe from index/oracle price updates for an instrument.
Sourcepub async fn subscribe_funding_rates(
&self,
instrument_id: InstrumentId,
) -> Result<()>
pub async fn subscribe_funding_rates( &self, instrument_id: InstrumentId, ) -> Result<()>
Subscribe to funding rate updates for an instrument.
Sourcepub async fn unsubscribe_funding_rates(
&self,
instrument_id: InstrumentId,
) -> Result<()>
pub async fn unsubscribe_funding_rates( &self, instrument_id: InstrumentId, ) -> Result<()>
Unsubscribe from funding rate updates for an instrument.
Sourcepub fn cache_instruments(&mut self, instruments: Vec<InstrumentAny>)
pub fn cache_instruments(&mut self, instruments: Vec<InstrumentAny>)
Caches multiple instruments.
Clears the existing cache first, then adds all provided instruments. Instruments are keyed by their full Nautilus symbol (e.g., “BTC-USD-PERP”).
Sourcepub fn cache_instrument(&self, instrument: InstrumentAny)
pub fn cache_instrument(&self, instrument: InstrumentAny)
Caches a single instrument.
Any existing instrument with the same symbol will be replaced.
Sourcepub fn get_instrument(&self, id: &InstrumentId) -> Option<InstrumentAny>
pub fn get_instrument(&self, id: &InstrumentId) -> Option<InstrumentAny>
Gets an instrument from the cache by ID.
Looks up the instrument by its full Nautilus symbol (e.g., “BTC-USD-PERP”).
Sourcepub fn get_instrument_by_symbol(&self, symbol: &Ustr) -> Option<InstrumentAny>
pub fn get_instrument_by_symbol(&self, symbol: &Ustr) -> Option<InstrumentAny>
Gets an instrument from the cache by symbol.
Sourcepub fn subscription_count(&self) -> usize
pub fn subscription_count(&self) -> usize
Returns the count of confirmed subscriptions.
Sourcepub fn get_bar_type(&self, coin: &str, interval: &str) -> Option<BarType>
pub fn get_bar_type(&self, coin: &str, interval: &str) -> Option<BarType>
Gets a bar type from the cache by coin and interval.
This looks up the subscription key created when subscribing to bars.
Sourcepub async fn next_event(&mut self) -> Option<NautilusWsMessage>
pub async fn next_event(&mut self) -> Option<NautilusWsMessage>
Receives the next message from the WebSocket handler.
Returns None if the handler has disconnected or the receiver was already taken.
Trait Implementations§
Source§impl Clone for HyperliquidWebSocketClient
impl Clone for HyperliquidWebSocketClient
Source§impl Debug for HyperliquidWebSocketClient
impl Debug for HyperliquidWebSocketClient
Source§impl<'py> IntoPyObject<'py> for HyperliquidWebSocketClient
impl<'py> IntoPyObject<'py> for HyperliquidWebSocketClient
Source§type Target = HyperliquidWebSocketClient
type Target = HyperliquidWebSocketClient
Source§type Output = Bound<'py, <HyperliquidWebSocketClient as IntoPyObject<'py>>::Target>
type Output = Bound<'py, <HyperliquidWebSocketClient as IntoPyObject<'py>>::Target>
Source§fn into_pyobject(
self,
py: Python<'py>,
) -> Result<<Self as IntoPyObject<'_>>::Output, <Self as IntoPyObject<'_>>::Error>
fn into_pyobject( self, py: Python<'py>, ) -> Result<<Self as IntoPyObject<'_>>::Output, <Self as IntoPyObject<'_>>::Error>
Source§impl PyClass for HyperliquidWebSocketClient
impl PyClass for HyperliquidWebSocketClient
Source§impl PyClassImpl for HyperliquidWebSocketClient
impl PyClassImpl for HyperliquidWebSocketClient
Source§const IS_BASETYPE: bool = false
const IS_BASETYPE: bool = false
Source§const IS_SUBCLASS: bool = false
const IS_SUBCLASS: bool = false
Source§const IS_MAPPING: bool = false
const IS_MAPPING: bool = false
Source§const IS_SEQUENCE: bool = false
const IS_SEQUENCE: bool = false
Source§const IS_IMMUTABLE_TYPE: bool = false
const IS_IMMUTABLE_TYPE: bool = false
Source§const RAW_DOC: &'static CStr = /// Hyperliquid WebSocket client following the BitMEX pattern.
///
/// Orchestrates WebSocket connection and subscriptions using a command-based architecture,
/// where the inner FeedHandler owns the WebSocketClient and handles all I/O.
const RAW_DOC: &'static CStr = /// Hyperliquid WebSocket client following the BitMEX pattern. /// /// Orchestrates WebSocket connection and subscriptions using a command-based architecture, /// where the inner FeedHandler owns the WebSocketClient and handles all I/O.
Source§const DOC: &'static CStr
const DOC: &'static CStr
text_signature if a constructor is defined. Read moreSource§type ThreadChecker = SendablePyClass<HyperliquidWebSocketClient>
type ThreadChecker = SendablePyClass<HyperliquidWebSocketClient>
Source§type PyClassMutability = <<PyAny as PyClassBaseType>::PyClassMutability as PyClassMutability>::MutableChild
type PyClassMutability = <<PyAny as PyClassBaseType>::PyClassMutability as PyClassMutability>::MutableChild
Source§type BaseNativeType = PyAny
type BaseNativeType = PyAny
PyAny by default, and when you declare
#[pyclass(extends=PyDict)], it’s PyDict.fn items_iter() -> PyClassItemsIter
fn lazy_type_object() -> &'static LazyTypeObject<Self>
fn dict_offset() -> Option<isize>
fn weaklist_offset() -> Option<isize>
Source§impl PyClassNewTextSignature for HyperliquidWebSocketClient
impl PyClassNewTextSignature for HyperliquidWebSocketClient
const TEXT_SIGNATURE: &'static str = "(url=None, testnet=False, product_type=..., account_id=None)"
Source§impl PyMethods<HyperliquidWebSocketClient> for PyClassImplCollector<HyperliquidWebSocketClient>
impl PyMethods<HyperliquidWebSocketClient> for PyClassImplCollector<HyperliquidWebSocketClient>
fn py_methods(self) -> &'static PyClassItems
Source§impl PyTypeInfo for HyperliquidWebSocketClient
impl PyTypeInfo for HyperliquidWebSocketClient
Source§fn type_object_raw(py: Python<'_>) -> *mut PyTypeObject
fn type_object_raw(py: Python<'_>) -> *mut PyTypeObject
§fn type_object(py: Python<'_>) -> Bound<'_, PyType>
fn type_object(py: Python<'_>) -> Bound<'_, PyType>
§fn is_type_of(object: &Bound<'_, PyAny>) -> bool
fn is_type_of(object: &Bound<'_, PyAny>) -> bool
object is an instance of this type or a subclass of this type.§fn is_exact_type_of(object: &Bound<'_, PyAny>) -> bool
fn is_exact_type_of(object: &Bound<'_, PyAny>) -> bool
object is an instance of this type.impl DerefToPyAny for HyperliquidWebSocketClient
impl ExtractPyClassWithClone for HyperliquidWebSocketClient
Auto Trait Implementations§
impl Freeze for HyperliquidWebSocketClient
impl !RefUnwindSafe for HyperliquidWebSocketClient
impl Send for HyperliquidWebSocketClient
impl Sync for HyperliquidWebSocketClient
impl Unpin for HyperliquidWebSocketClient
impl !UnwindSafe for HyperliquidWebSocketClient
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<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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§impl<'py, T> IntoPyObjectExt<'py> for Twhere
T: IntoPyObject<'py>,
impl<'py, T> IntoPyObjectExt<'py> for Twhere
T: IntoPyObject<'py>,
§fn into_bound_py_any(self, py: Python<'py>) -> Result<Bound<'py, PyAny>, PyErr>
fn into_bound_py_any(self, py: Python<'py>) -> Result<Bound<'py, PyAny>, PyErr>
self into an owned Python object, dropping type information.§fn into_py_any(self, py: Python<'py>) -> Result<Py<PyAny>, PyErr>
fn into_py_any(self, py: Python<'py>) -> Result<Py<PyAny>, PyErr>
self into an owned Python object, dropping type information and unbinding it
from the 'py lifetime.§fn into_pyobject_or_pyerr(self, py: Python<'py>) -> Result<Self::Output, PyErr>
fn into_pyobject_or_pyerr(self, py: Python<'py>) -> Result<Self::Output, PyErr>
self into a Python object. Read moreSource§impl<'py, T> IntoPyObjectNautilusExt<'py> for Twhere
T: IntoPyObjectExt<'py>,
impl<'py, T> IntoPyObjectNautilusExt<'py> for Twhere
T: IntoPyObjectExt<'py>,
Source§fn into_py_any_unwrap(self, py: Python<'py>) -> Py<PyAny>
fn into_py_any_unwrap(self, py: Python<'py>) -> Py<PyAny>
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
§impl<T> PyErrArguments for T
impl<T> PyErrArguments for T
§impl<T> PyTypeCheck for Twhere
T: PyTypeInfo,
impl<T> PyTypeCheck for Twhere
T: PyTypeInfo,
§const NAME: &'static str = T::NAME
const NAME: &'static str = T::NAME
§fn type_check(object: &Bound<'_, PyAny>) -> bool
fn type_check(object: &Bound<'_, PyAny>) -> bool
§fn classinfo_object(py: Python<'_>) -> Bound<'_, PyAny>
fn classinfo_object(py: Python<'_>) -> Bound<'_, PyAny>
isinstance and issubclass function. Read more§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.