add the beginning of an unauthenticated client
This commit is contained in:
+63
-1
@@ -118,7 +118,7 @@ use page::Page;
|
|||||||
pub use data::Data;
|
pub use data::Data;
|
||||||
pub use errors::{ApiError, Error, Result};
|
pub use errors::{ApiError, Error, Result};
|
||||||
pub use isolang::Language;
|
pub use isolang::Language;
|
||||||
pub use mastodon_client::MastodonClient;
|
pub use mastodon_client::{MastodonClient, MastodonUnauthenticated};
|
||||||
pub use registration::Registration;
|
pub use registration::Registration;
|
||||||
pub use requests::{
|
pub use requests::{
|
||||||
AddFilterRequest,
|
AddFilterRequest,
|
||||||
@@ -660,6 +660,68 @@ impl<H: HttpSend> MastodonBuilder<H> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Client that can make unauthenticated calls to a mastodon instance
|
||||||
|
#[derive(Clone, Debug)]
|
||||||
|
pub struct MastodonUnauth<H: HttpSend = HttpSender> {
|
||||||
|
client: Client,
|
||||||
|
http_sender: H,
|
||||||
|
base: url::Url,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl MastodonUnauth<HttpSender> {
|
||||||
|
/// Create a new unauthenticated client
|
||||||
|
pub fn new(base: &str) -> Result<MastodonUnauth<HttpSender>> {
|
||||||
|
let base = if base.starts_with("https://") {
|
||||||
|
base.to_string()
|
||||||
|
} else {
|
||||||
|
format!("https://{}", base)
|
||||||
|
};
|
||||||
|
Ok(MastodonUnauth {
|
||||||
|
client: Client::new(),
|
||||||
|
http_sender: HttpSender,
|
||||||
|
base: url::Url::parse(&base)?,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<H: HttpSend> MastodonUnauth<H> {
|
||||||
|
fn route(&self, url: &str) -> Result<url::Url> {
|
||||||
|
Ok(self.base.join(url)?)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn send(&self, req: RequestBuilder) -> Result<Response> {
|
||||||
|
Ok(self.http_sender.send(&self.client, req)?)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<H: HttpSend> MastodonUnauthenticated<H> for MastodonUnauth<H> {
|
||||||
|
/// GET /api/v1/statuses/:id
|
||||||
|
fn get_status(&self, id: &str) -> Result<Status> {
|
||||||
|
let route = self.route("/api/v1/statuses")?;
|
||||||
|
let route = route.join(id)?;
|
||||||
|
let response = self.send(self.client.get(route))?;
|
||||||
|
deserialise(response)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// GET /api/v1/statuses/:id/context
|
||||||
|
fn get_context(&self, id: &str) -> Result<Context> {
|
||||||
|
let route = self.route("/api/v1/statuses")?;
|
||||||
|
let route = route.join(id)?;
|
||||||
|
let route = route.join("context")?;
|
||||||
|
let response = self.send(self.client.get(route))?;
|
||||||
|
deserialise(response)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// GET /api/v1/statuses/:id/card
|
||||||
|
fn get_card(&self, id: &str) -> Result<Card> {
|
||||||
|
let route = self.route("/api/v1/statuses")?;
|
||||||
|
let route = route.join(id)?;
|
||||||
|
let route = route.join("card")?;
|
||||||
|
let response = self.send(self.client.get(route))?;
|
||||||
|
deserialise(response)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Convert the HTTP response body from JSON. Pass up deserialization errors
|
// Convert the HTTP response body from JSON. Pass up deserialization errors
|
||||||
// transparently.
|
// transparently.
|
||||||
fn deserialise<T: for<'de> serde::Deserialize<'de>>(response: Response) -> Result<T> {
|
fn deserialise<T: for<'de> serde::Deserialize<'de>>(response: Response) -> Result<T> {
|
||||||
|
|||||||
@@ -356,3 +356,29 @@ pub trait MastodonClient<H: HttpSend = HttpSender> {
|
|||||||
unimplemented!("This method was not implemented");
|
unimplemented!("This method was not implemented");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Trait that represents clients that can make unauthenticated calls to a
|
||||||
|
/// mastodon instance
|
||||||
|
#[allow(unused)]
|
||||||
|
pub trait MastodonUnauthenticated<H: HttpSend> {
|
||||||
|
/// GET /api/v1/statuses/:id
|
||||||
|
fn get_status(&self, id: &str) -> Result<Status> {
|
||||||
|
unimplemented!("This method was not implemented");
|
||||||
|
}
|
||||||
|
/// GET /api/v1/statuses/:id/context
|
||||||
|
fn get_context(&self, id: &str) -> Result<Context> {
|
||||||
|
unimplemented!("This method was not implemented");
|
||||||
|
}
|
||||||
|
/// GET /api/v1/statuses/:id/card
|
||||||
|
fn get_card(&self, id: &str) -> Result<Card> {
|
||||||
|
unimplemented!("This method was not implemented");
|
||||||
|
}
|
||||||
|
/// GET /api/v1/statuses/:id/reblogged_by
|
||||||
|
fn reblogged_by(&self, id: &str) -> Result<Page<Account, H>> {
|
||||||
|
unimplemented!("This method was not implemented");
|
||||||
|
}
|
||||||
|
/// GET /api/v1/statuses/:id/favourited_by
|
||||||
|
fn favourited_by(&self, id: &str) -> Result<Page<Account, H>> {
|
||||||
|
unimplemented!("This method was not implemented");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user