use crate::model::{Body, Request};
use serde::Serialize;
#[derive(Clone, Debug, Serialize)]
pub struct TokenExchangeForm {
grant_type: &'static str,
pub code: String,
pub code_verifier: String,
pub redirect_uri: String,
pub client_id: String,
}
impl TokenExchangeForm {
pub fn new(
code: impl Into<String>,
code_verifier: impl Into<String>,
redirect_uri: impl Into<String>,
client_id: impl Into<String>,
) -> Self {
Self {
grant_type: "authorization_code",
code: code.into(),
code_verifier: code_verifier.into(),
redirect_uri: redirect_uri.into(),
client_id: client_id.into(),
}
}
}
#[derive(Default, Clone, Debug, Serialize)]
pub struct PostQuery;
pub type PostRequest = Request<PostQuery, TokenExchangeForm>;
impl PostRequest {
pub fn new(form: TokenExchangeForm) -> Self {
Self::post("/api/token", None, Body::Form(form), None)
}
}
impl From<TokenExchangeForm> for PostRequest {
fn from(form: TokenExchangeForm) -> Self {
Self::new(form)
}
}