1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
//! A Rust library for the Twitch Helix API with type safety and comprehensive EventSub support.
//!
//! Official Twitch API Documentation: <https://dev.twitch.tv/docs/api/reference/>
//!
//! ## Getting Started
//!
//! ### Basic Usage
//!
//! ```no_run
//! use twitch_highway::{
//! moderation::ModerationAPI,
//! types::{BroadcasterId, ModeratorId, UserId},
//! AccessToken, ClientId,
//! };
//!
//! # async fn example() -> Result<(), Box<dyn std::error::Error>> {
//! let api = twitch_highway::Client::new(
//! AccessToken::from("your_access_token"),
//! ClientId::from("your_client_id"),
//! );
//!
//! let response = api
//! .ban_user(
//! &BroadcasterId::from("12345"),
//! &ModeratorId::from("67890"),
//! &UserId::from("54321"),
//! )
//! .duration(600) // Optional: 10 minutes
//! .reason("no reason") // Optional
//! .send()
//! .await?;
//!
//! println!("User banned successfully");
//! # Ok(())
//! # }
//! ```
//!
//! ## Error Handling
//!
//! ```no_run
//! # use twitch_highway::{types::UserId, videos::VideosAPI, Client};
//! # async fn example(api: Client) {
//! match api.get_videos(&UserId::from("123")).send().await {
//! Ok(response) => {
//! // Process successful response
//! }
//! Err(e) => {
//! if e.is_request() {
//! // Network or connection error
//! eprintln!("Request failed: {}", e);
//! } else if e.is_api() {
//! // Twitch API returned an error (4xx, 5xx)
//! eprintln!("API error: {}", e);
//! } else if e.is_parse() {
//! // Failed to parse response
//! eprintln!("JSON decode error: {}", e);
//! }
//! }
//! }
//! # }
//! ```
//!
//! ## EventSub Integration
//!
//! Comprehensive support for both Webhook and WebSocket transports.
//!
//! ### Webhook Verification
//!
//! - HMAC-SHA256 signature verification
//! - Framework integrations: axum, actix-web
//! - Custom implementations via [`HeaderAccess`](crate::eventsub::webhook::HeaderAccess) trait
//!
//! #### Feature Flags
//!
//! - `webhook-axum`: Axum framework support
//! - `webhook-actix`: Actix-web framework support
//!
//! ### WebSocket Client
//!
//! - Automatic reconnection with exponential backoff
//! - Keepalive message handling
//! - Type-safe event routing (similar to axum)
//! - Middleware support (logging, rate limiting)
//!
//! #### Feature Flags
//!
//! - `websocket`: WebSocket client with reconnection and event routing
//!
//! See the [`eventsub`] module documentation for more details.
//!
//! ## OAuth Token Management
//!
//! This library is designed to work with [`twitch_oauth_token`](https://docs.rs/twitch_oauth_token) for OAuth authentication.
//!
pub use Client;
pub use Error;
pub use ;