use self::private::Sealed;
use crate::client::Client;
use crate::error::Result;
use crate::parse::ProcessedResult;
use crate::query::{GetQuery, PostQuery};
use crate::{process::RawResult, query::Query};
pub use browser::BrowserToken;
pub use oauth::{OAuthToken, OAuthTokenGenerator};
pub mod browser;
pub mod oauth;
mod private {
pub trait Sealed {}
}
#[allow(async_fn_in_trait)]
pub trait AuthToken: Sized + Sealed {
async fn raw_query_post<'a, Q: PostQuery + Query<Self>>(
&self,
client: &Client,
query: &'a Q,
) -> Result<RawResult<'a, Q, Self>>;
async fn raw_query_get<'a, Q: GetQuery + Query<Self>>(
&self,
client: &Client,
query: &'a Q,
) -> Result<RawResult<'a, Q, Self>>;
fn deserialize_json<Q: Query<Self>>(raw: RawResult<Q, Self>) -> Result<ProcessedResult<Q>>;
}