use serde::Deserialize; use crate::{api, query}; #[derive(Clone)] struct CreateDeviceCode; #[derive(Deserialize)] struct DeviceCodeResponse { device_code: String, user_code: String, vertification_uri: String, expires_in: u16, interval: u16, } impl query::QueryFn for CreateDeviceCode { type Data = DeviceCodeResponse; type Error = api::Error; type Context = api::QueryContext; fn key(&self) -> &'static str { todo!() } async fn run(&self, c: &Self::Context) -> Result { let data = c .http .post(format!( "https://github.com/login/device/code?client_id={}", c.github.client_id )) .send() .await? .bytes() .await?; serde_json::from_slice::(&data).map_err(|e| e.into()) } }