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
use crate::{ client::Client, error::Error, request::{GetGatewayAuthed, Pending, Request}, routing::Route, }; use twilight_model::gateway::connection_info::ConnectionInfo; /// Get information about the gateway, optionally with additional information detailing the /// number of shards to use and sessions remaining. /// /// # Examples /// /// Get the gateway connection URL without bot information: /// /// ```rust,no_run /// use twilight_http::Client; /// /// # #[tokio::main] /// # async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> { /// let client = Client::new("my token"); /// /// let info = client.gateway().await?; /// # Ok(()) } /// ``` /// /// Get the gateway connection URL with additional shard and session information, which /// requires specifying a bot token: /// /// ```rust,no_run /// use twilight_http::Client; /// /// # #[tokio::main] /// # async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> { /// let client = Client::new("my token"); /// /// let info = client.gateway().authed().await?; /// /// println!("URL: {}", info.url); /// println!("Recommended shards to use: {}", info.shards); /// # Ok(()) } /// ``` pub struct GetGateway<'a> { fut: Option<Pending<'a, ConnectionInfo>>, http: &'a Client, } impl<'a> GetGateway<'a> { pub(crate) fn new(http: &'a Client) -> Self { Self { fut: None, http } } /// Call to authenticate this request. /// /// Returns additional information: the recommended number of shards to use, and information on /// the current session start limit. pub fn authed(self) -> GetGatewayAuthed<'a> { GetGatewayAuthed::new(self.http) } fn start(&mut self) -> Result<(), Error> { let request = Request::from_route(Route::GetGateway); self.fut.replace(Box::pin(self.http.request(request))); Ok(()) } } poll_req!(GetGateway<'_>, ConnectionInfo);