roshi 0.0.1

A Rust client for the Kalshi API
Documentation
//! # Roshi β€” Kalshi SDK for Rust
//!
//! **Roshi** is a fully asynchronous, type-safe, and ergonomic SDK for interacting with the [Kalshi](https://kalshi.com/) prediction market exchange.
//!
//! This crate wraps both Kalshi’s **REST** and **WebSocket** APIs.
//!
//! ---
//!
//! ## Features
//!
//! - βœ… Full support for [Kalshi's REST API](https://docs.kalshi.com/api-reference/)
//! - πŸ“‘ Real-time market data over Kalshi's WebSocket feeds
//! - πŸ” API key authentication and request signing
//! - 🧠 Typed models for events, markets, orders, and more
//! - πŸ“¦ Built on `reqwest`, `tokio`, `serde`, and `tokio-tungstenite`
//!
//! ---
//!
//! ## Quick Start
//!
//! ### REST Client Example
//!
//! ```rust
//! use roshi::HttpClient;
//! use roshi::mode::Mode;
//!
//! #[tokio::main]
//! async fn main() -> anyhow::Result<()> {
//!     let client = HttpClient::new(Mode::Demo, Some("your-api-key".to_string()), None);
//!     let markets = client.get_markets().await?;
//!
//!     for market in markets.markets.unwrap_or_default() {
//!         println!("{} - {}", market.ticker.unwrap_or_default(), market.title.unwrap_or_default());
//!     }
//!     Ok(())
//! }
//! ```
//!
//! ### WebSocket Client Example
//!
//! ```rust
//! use roshi::WebSocketClient;
//!
//! #[tokio::main]
//! async fn main() -> anyhow::Result<()> {
//!     let mut ws = WebSocketClient::connect().await?;
//!     ws.subscribe_market("INFLATION2024").await?;
//!
//!     while let Some(event) = ws.next_event().await {
//!         match event {
//!             roshi::WebSocketEvent::MarketUpdate(update) => println!("{:#?}", update),
//!             roshi::WebSocketEvent::Error(e) => eprintln!("WebSocket error: {:?}", e),
//!             _ => {}
//!         }
//!     }
//!     Ok(())
//! }
//! ```
//!
//! ---
//!
//! ## Modules
//!
//! - [`client`] β€” REST and WebSocket API support
//! - [`constants`] β€” API Endpoints
//! - [`types`] β€” Typed data structures for markets, events, orders, etc.
//! - [`utils`] β€” Utility functions for signing, formatting, etc.
//!
//! ---
//!
//! ## Crate Features
//!
//! Enable optional features in your `Cargo.toml`:
//!
//! ```toml
//! [dependencies.roshi]
//! version = "0.1"
//! features = ["rest_client", "ws_client", "debug"]
//! ```
//!
//! ---
//!
//! ## License
//!
//! Licensed under the MIT License.
//!

#[macro_use]
pub mod macros;

pub mod client;
pub mod constants;
pub mod mode;
pub mod types;
pub mod utils;

#[cfg(feature = "rest_client")]
pub use client::rest_client::HttpClient;

#[cfg(feature = "ws_client")]
pub use client::ws_client::WebSocketClient;

pub use constants::endpoints;
pub use types::*;
pub use utils::format_endpoint;