#![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 Vinted {
client: Client,
}
impl Vinted {
pub(crate) fn new(client: Client) -> Self {
Self { client }
}
pub fn client(&self) -> &Client {
&self.client
}
pub async fn search_brands(&self, params: SearchBrandsParams) -> Result<SearchBrandsResponse> {
let path = "/v1/vinted/brands".to_string();
let mut q = QueryParams::new();
q.opt("keyword", params.keyword.as_ref());
q.opt("market", params.market.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn list_colors(&self, params: ListColorsParams) -> Result<ListColorsResponse> {
let path = "/v1/vinted/colors".to_string();
let mut q = QueryParams::new();
q.opt("market", params.market.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn get_item_detail(
&self,
item_id: impl AsRef<str>,
params: GetItemDetailParams,
) -> Result<GetItemDetailResponse> {
let path = format!("/v1/vinted/items/{item_id}", item_id = item_id.as_ref());
let mut q = QueryParams::new();
q.opt("market", params.market.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn list_markets(&self, params: ListMarketsParams) -> Result<ListMarketsResponse> {
let path = "/v1/vinted/markets".to_string();
let query: Vec<(String, String)> = Vec::new();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn search_items(&self, params: SearchItemsParams) -> Result<SearchItemsResponse> {
let path = "/v1/vinted/search".to_string();
let mut q = QueryParams::new();
q.opt("query", params.query.as_ref());
q.opt("market", params.market.as_ref());
q.opt("page", params.page.as_ref());
q.opt("per_page", params.per_page.as_ref());
q.opt("price_from", params.price_from.as_ref());
q.opt("price_to", params.price_to.as_ref());
q.opt("brand_ids", params.brand_ids.as_ref());
q.opt("color_ids", params.color_ids.as_ref());
q.opt("status_ids", params.status_ids.as_ref());
q.opt("order", params.order.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn list_statuses(&self, params: ListStatusesParams) -> Result<ListStatusesResponse> {
let path = "/v1/vinted/statuses".to_string();
let mut q = QueryParams::new();
q.opt("market", params.market.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn get_user_profile(
&self,
user_id: impl AsRef<str>,
params: GetUserProfileParams,
) -> Result<GetUserProfileResponse> {
let path = format!("/v1/vinted/users/{user_id}", user_id = user_id.as_ref());
let mut q = QueryParams::new();
q.opt("market", params.market.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
pub async fn get_user_items(
&self,
user_id: impl AsRef<str>,
params: GetUserItemsParams,
) -> Result<GetUserItemsResponse> {
let path = format!(
"/v1/vinted/users/{user_id}/items",
user_id = user_id.as_ref()
);
let mut q = QueryParams::new();
q.opt("market", params.market.as_ref());
q.opt("page", params.page.as_ref());
q.opt("per_page", params.per_page.as_ref());
let query = q.into_pairs();
let body = None;
self.client.send(Method::GET, &path, &query, body).await
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct GetItemDetailResponse {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub brand_title: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub color1: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub color2: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub created_at: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub currency: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub description: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub favourite_count: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub id: Option<i64>,
pub photos: Vec<VintedPhoto>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub price: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub size_title: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub status: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub updated_at: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub url: Option<String>,
pub user: Option<VintedUserSummary>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub view_count: Option<i64>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct GetUserItemsResponse {
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub current_page: Option<i64>,
pub items: Vec<VintedItemSummary>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub per_page: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub total_entries: Option<i64>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct GetUserProfileResponse {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub city: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub country_title: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub created_at: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub feedback_count: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_f64")]
pub feedback_reputation: Option<f64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub followers_count: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub following_count: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub given_item_count: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub id: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub item_count: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub last_loged_on: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub login: Option<String>,
pub photo: Option<GetUserProfileResponsePhoto>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct GetUserProfileResponsePhoto {
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub height: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub url: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub width: Option<i64>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct ListColorsResponse {
pub colors: Vec<ListColorsResponseColorsItem>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct ListColorsResponseColorsItem {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub hex: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub id: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct ListMarketsResponse {
pub markets: Vec<ListMarketsResponseMarketsItem>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct ListMarketsResponseMarketsItem {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub code: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub currency: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub domain: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct ListStatusesResponse {
pub statuses: Vec<ListStatusesResponseStatusesItem>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct ListStatusesResponseStatusesItem {
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub id: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct SearchBrandsResponse {
pub brands: Vec<SearchBrandsResponseBrandsItem>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct SearchBrandsResponseBrandsItem {
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub favourite_count: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub id: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub item_count: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub slug: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[non_exhaustive]
pub enum SearchItemsOrder {
#[serde(rename = "relevance")]
Relevance,
#[serde(rename = "price_low_to_high")]
PriceLowToHigh,
#[serde(rename = "price_high_to_low")]
PriceHighToLow,
#[serde(rename = "newest_first")]
NewestFirst,
}
impl std::fmt::Display for SearchItemsOrder {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(match self {
SearchItemsOrder::Relevance => "relevance",
SearchItemsOrder::PriceLowToHigh => "price_low_to_high",
SearchItemsOrder::PriceHighToLow => "price_high_to_low",
SearchItemsOrder::NewestFirst => "newest_first",
})
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct SearchItemsResponse {
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub current_page: Option<i64>,
pub items: Vec<VintedItemSummary>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub per_page: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub total_entries: Option<i64>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct VintedItemSummary {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub brand_title: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub currency: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub favourite_count: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub id: Option<i64>,
pub photo: Option<VintedPhoto>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub price: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub size_title: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub title: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub url: Option<String>,
pub user: Option<VintedUserSummary>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct VintedPhoto {
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub height: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub url: Option<String>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub width: Option<i64>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct VintedUserSummary {
#[serde(default, deserialize_with = "crate::core::flex::opt_f64")]
pub feedback_reputation: Option<f64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_i64")]
pub id: Option<i64>,
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub login: Option<String>,
pub photo: Option<VintedUserSummaryPhoto>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct VintedUserSummaryPhoto {
#[serde(default, deserialize_with = "crate::core::flex::opt_string")]
pub url: Option<String>,
#[serde(flatten)]
pub extra: HashMap<String, Value>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct SearchBrandsParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub keyword: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub market: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct ListColorsParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub market: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct GetItemDetailParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub market: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct ListMarketsParams {}
#[derive(Debug, Clone, Default, Serialize)]
pub struct SearchItemsParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub query: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub market: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub page: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub per_page: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub price_from: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub price_to: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub brand_ids: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub color_ids: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status_ids: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub order: Option<SearchItemsOrder>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct ListStatusesParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub market: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct GetUserProfileParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub market: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct GetUserItemsParams {
#[serde(skip_serializing_if = "Option::is_none")]
pub market: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub page: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub per_page: Option<i64>,
}