use serde::Serialize;
use std::fmt;
#[derive(Serialize)]
pub struct Sauce {
pub ext_urls: Vec<String>,
pub title: Option<String>,
pub site: String,
pub index: u32,
pub index_id: u32,
pub similarity: f32,
pub thumbnail: String,
pub additional_fields: Option<serde_json::Value>,
}
#[allow(clippy::too_many_arguments)]
pub(in crate::handler) fn new_sauce(
ext_urls: Vec<String>, title: Option<String>, site: String, index: u32, index_id: u32,
similarity: f32, thumbnail: String, additional_fields: Option<serde_json::Value>,
) -> Sauce {
Sauce {
ext_urls,
title,
site,
index,
index_id,
similarity,
thumbnail,
additional_fields,
}
}
impl Sauce {
pub fn has_empty_url(&self) -> bool {
self.ext_urls.is_empty()
}
}
impl fmt::Debug for Sauce {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let mut result: String = String::new();
result.push_str("ext_urls: ");
for i in self.ext_urls.clone() {
result.push_str(format!("\"{}\"", i.as_str()).as_str());
result.push_str(" ");
}
result.push_str("\nsite: ");
result.push_str(self.site.as_str());
match &self.title {
Some(x) => {
result.push_str("\ntitle: ");
result.push_str(x.as_str());
}
None => (),
}
result.push_str("\nindex: ");
result.push_str(self.index.to_string().as_str());
result.push_str("\nindex_id: ");
result.push_str(self.index_id.to_string().as_str());
result.push_str("\nsimilarity: ");
result.push_str(self.similarity.to_string().as_str());
result.push_str("\nthumbnail: ");
result.push_str(format!("\"{}\"", self.thumbnail.as_str()).as_str());
result.push_str("\nauthor_id: ");
if let Some(author) = self.additional_fields.clone() {
result.push_str(author.to_string().as_str());
}
write!(f, "{}", result)
}
}