#![allow(clippy::all)]
#![allow(
dead_code,
unused_imports,
unused_variables,
non_snake_case,
rustdoc::all
)]
use crate::core::{Client, Error, Method, QueryParams, Result};
use serde::{Deserialize, Serialize};
use serde_json::Value;
use std::collections::HashMap;
#[derive(Clone)]
pub struct Reddit {
client: Client,
}
impl Reddit {
pub(crate) fn new(client: Client) -> Self {
Self { client }
}
pub fn client(&self) -> &Client {
&self.client
}
pub async fn get_domain_posts(
&self,
domain: impl AsRef<str>,
params: GetDomainPostsParams,
) -> Result<crate::reddit::models::PostsResponse> {
let path = format!(
"/v1/reddit/domains/{domain}/posts",
domain = domain.as_ref()
);
let mut q = QueryParams::new();
q.opt("sort", params.sort.as_ref());
q.opt("t", params.t.as_ref());
q.opt("limit", params.limit.as_ref());
q.opt("after", params.after.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn get_trending_posts(
&self,
params: GetTrendingPostsParams,
) -> Result<crate::reddit::models::PostsResponse> {
let path = "/v1/reddit/posts/trending".to_string();
let mut q = QueryParams::new();
q.opt("sort", params.sort.as_ref());
q.opt("t", params.t.as_ref());
q.opt("limit", params.limit.as_ref());
q.opt("after", params.after.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn get_post(
&self,
post_id: impl AsRef<str>,
params: GetPostParams,
) -> Result<crate::reddit::models::PostResponse> {
let path = format!("/v1/reddit/posts/{post_id}", post_id = post_id.as_ref());
let query: Vec<(String, String)> = Vec::new();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn get_post_comments(
&self,
post_id: impl AsRef<str>,
params: GetPostCommentsParams,
) -> Result<crate::reddit::models::PostCommentsResponse> {
let path = format!(
"/v1/reddit/posts/{post_id}/comments",
post_id = post_id.as_ref()
);
let mut q = QueryParams::new();
q.opt("sort", params.sort.as_ref());
q.opt("limit", params.limit.as_ref());
q.opt("depth", params.depth.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn get_post_duplicates(
&self,
post_id: impl AsRef<str>,
params: GetPostDuplicatesParams,
) -> Result<crate::reddit::models::PostDuplicatesResponse> {
let path = format!(
"/v1/reddit/posts/{post_id}/duplicates",
post_id = post_id.as_ref()
);
let mut q = QueryParams::new();
q.opt("limit", params.limit.as_ref());
q.opt("after", params.after.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn search_posts(
&self,
params: SearchPostsParams,
) -> Result<crate::reddit::models::PostsResponse> {
let path = "/v1/reddit/search/posts".to_string();
let mut q = QueryParams::new();
q.opt("q", params.q.as_ref());
q.opt("subreddit", params.subreddit.as_ref());
q.opt("sort", params.sort.as_ref());
q.opt("t", params.t.as_ref());
q.opt("limit", params.limit.as_ref());
q.opt("after", params.after.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn search_subreddits(
&self,
params: SearchSubredditsParams,
) -> Result<crate::reddit::models::SubredditsResponse> {
let path = "/v1/reddit/search/subreddits".to_string();
let mut q = QueryParams::new();
q.opt("q", params.q.as_ref());
q.opt("limit", params.limit.as_ref());
q.opt("after", params.after.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn search_users(
&self,
params: SearchUsersParams,
) -> Result<crate::reddit::models::UsersResponse> {
let path = "/v1/reddit/search/users".to_string();
let mut q = QueryParams::new();
q.opt("q", params.q.as_ref());
q.opt("limit", params.limit.as_ref());
q.opt("after", params.after.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn get_new_subreddits(
&self,
params: GetNewSubredditsParams,
) -> Result<crate::reddit::models::SubredditsResponse> {
let path = "/v1/reddit/subreddits/new".to_string();
let mut q = QueryParams::new();
q.opt("limit", params.limit.as_ref());
q.opt("after", params.after.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn get_popular_subreddits(
&self,
params: GetPopularSubredditsParams,
) -> Result<crate::reddit::models::SubredditsResponse> {
let path = "/v1/reddit/subreddits/popular".to_string();
let mut q = QueryParams::new();
q.opt("limit", params.limit.as_ref());
q.opt("after", params.after.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn get_subreddit(
&self,
subreddit: impl AsRef<str>,
params: GetSubredditParams,
) -> Result<crate::reddit::models::SubredditResponse> {
let path = format!(
"/v1/reddit/subreddits/{subreddit}",
subreddit = subreddit.as_ref()
);
let query: Vec<(String, String)> = Vec::new();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn get_subreddit_posts(
&self,
subreddit: impl AsRef<str>,
params: GetSubredditPostsParams,
) -> Result<crate::reddit::models::PostsResponse> {
let path = format!(
"/v1/reddit/subreddits/{subreddit}/posts",
subreddit = subreddit.as_ref()
);
let mut q = QueryParams::new();
q.opt("sort", params.sort.as_ref());
q.opt("t", params.t.as_ref());
q.opt("limit", params.limit.as_ref());
q.opt("after", params.after.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn get_subreddit_rules(
&self,
subreddit: impl AsRef<str>,
params: GetSubredditRulesParams,
) -> Result<crate::reddit::models::SubredditRulesResponse> {
let path = format!(
"/v1/reddit/subreddits/{subreddit}/rules",
subreddit = subreddit.as_ref()
);
let query: Vec<(String, String)> = Vec::new();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn get_wiki_pages(
&self,
subreddit: impl AsRef<str>,
params: GetWikiPagesParams,
) -> Result<crate::reddit::models::WikiPagesResponse> {
let path = format!(
"/v1/reddit/subreddits/{subreddit}/wiki",
subreddit = subreddit.as_ref()
);
let query: Vec<(String, String)> = Vec::new();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn get_wiki_page(
&self,
subreddit: impl AsRef<str>,
page: impl AsRef<str>,
params: GetWikiPageParams,
) -> Result<crate::reddit::models::WikiPageResponse> {
let path = format!(
"/v1/reddit/subreddits/{subreddit}/wiki/{page}",
subreddit = subreddit.as_ref(),
page = page.as_ref()
);
let query: Vec<(String, String)> = Vec::new();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn get_user(
&self,
username: impl AsRef<str>,
params: GetUserParams,
) -> Result<crate::reddit::models::UserResponse> {
let path = format!("/v1/reddit/users/{username}", username = username.as_ref());
let query: Vec<(String, String)> = Vec::new();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn get_user_comments(
&self,
username: impl AsRef<str>,
params: GetUserCommentsParams,
) -> Result<crate::reddit::models::UserCommentsResponse> {
let path = format!(
"/v1/reddit/users/{username}/comments",
username = username.as_ref()
);
let mut q = QueryParams::new();
q.opt("sort", params.sort.as_ref());
q.opt("t", params.t.as_ref());
q.opt("limit", params.limit.as_ref());
q.opt("after", params.after.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn get_user_moderated(
&self,
username: impl AsRef<str>,
params: GetUserModeratedParams,
) -> Result<crate::reddit::models::UserModeratedResponse> {
let path = format!(
"/v1/reddit/users/{username}/moderated",
username = username.as_ref()
);
let query: Vec<(String, String)> = Vec::new();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn get_user_posts(
&self,
username: impl AsRef<str>,
params: GetUserPostsParams,
) -> Result<crate::reddit::models::PostsResponse> {
let path = format!(
"/v1/reddit/users/{username}/posts",
username = username.as_ref()
);
let mut q = QueryParams::new();
q.opt("sort", params.sort.as_ref());
q.opt("t", params.t.as_ref());
q.opt("limit", params.limit.as_ref());
q.opt("after", params.after.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn get_user_trophies(
&self,
username: impl AsRef<str>,
params: GetUserTrophiesParams,
) -> Result<crate::reddit::models::UserTrophiesResponse> {
let path = format!(
"/v1/reddit/users/{username}/trophies",
username = username.as_ref()
);
let query: Vec<(String, String)> = Vec::new();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct HttpValidationError {
pub detail: Vec<ValidationError>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct ValidationError {
pub ctx: HashMap<String, Value>,
pub input: Option<Value>,
pub loc: Vec<Value>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub msg: Option<String>,
#[serde(rename = "type")]
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub type_: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct GetDomainPostsParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub sort: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub t: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub after: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct GetTrendingPostsParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub sort: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub t: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub after: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct GetPostParams {}
#[derive(Debug, Clone, Default, Serialize)]
pub struct GetPostCommentsParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub sort: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub depth: Option<i64>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct GetPostDuplicatesParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub after: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct SearchPostsParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub q: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub subreddit: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sort: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub t: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub after: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct SearchSubredditsParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub q: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub after: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct SearchUsersParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub q: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub after: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct GetNewSubredditsParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub after: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct GetPopularSubredditsParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub after: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct GetSubredditParams {}
#[derive(Debug, Clone, Default, Serialize)]
pub struct GetSubredditPostsParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub sort: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub t: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub after: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct GetSubredditRulesParams {}
#[derive(Debug, Clone, Default, Serialize)]
pub struct GetWikiPagesParams {}
#[derive(Debug, Clone, Default, Serialize)]
pub struct GetWikiPageParams {}
#[derive(Debug, Clone, Default, Serialize)]
pub struct GetUserParams {}
#[derive(Debug, Clone, Default, Serialize)]
pub struct GetUserCommentsParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub sort: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub t: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub after: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct GetUserModeratedParams {}
#[derive(Debug, Clone, Default, Serialize)]
pub struct GetUserPostsParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub sort: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub t: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub after: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct GetUserTrophiesParams {}