use serde::Deserialize;
use serde::Serialize;
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Posts(Vec<Post>);
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Post {
pub preview_url: String,
pub sample_url: String,
pub file_url: String,
pub hash: String,
pub width: i64,
pub height: i64,
pub id: i64,
pub image: String,
pub owner: String,
pub parent_id: i64,
pub sample: bool,
pub sample_height: i64,
pub sample_width: i64,
pub score: i64,
pub tags: String,
pub has_notes: bool,
}
impl Posts {
pub fn get_p_urls(&self) -> Vec<&str> {
let mut urls: Vec<&str> = vec![];
self.0.iter().for_each(|x| urls.push(&x.preview_url));
urls
}
pub fn get_s_urls(&self) -> Vec<&str> {
let mut urls: Vec<&str> = vec![];
self.0.iter().for_each(|x| urls.push(&x.sample_url));
urls
}
pub fn get_f_urls(&self) -> Vec<&str> {
let mut urls: Vec<&str> = vec![];
self.0.iter().for_each(|x| urls.push(&x.file_url));
urls
}
pub fn get_p_url(&self) -> Option<&str> {
self.0.first().map(|x| x.preview_url.as_str())
}
pub fn get_s_url(&self) -> Option<&str> {
self.0.first().map(|x| x.sample_url.as_str())
}
pub fn get_f_url(&self) -> Option<&str> {
self.0.first().map(|x| x.file_url.as_str())
}
}
#[cfg(test)]
mod tests {
use crate::prelude::*;
#[tokio::test]
async fn create_make_link_search() {
let binding: Posts = Params::init().make_link().search().await.unwrap();
let result = binding.get_f_urls();
println!("{:#?}", result)
}
#[tokio::test]
async fn create_make_link_search_with_id() {
let binding: Posts = Params::init()
.id(10542274)
.make_link()
.search()
.await
.unwrap();
let result = binding.get_f_urls();
println!("{:#?}", result)
}
}