41 lines
911 B
Rust
41 lines
911 B
Rust
|
|
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<Self::Data, Self::Error> {
|
||
|
|
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::<DeviceCodeResponse>(&data).map_err(|e| e.into())
|
||
|
|
}
|
||
|
|
}
|