use super::SearchHit;
use serde::{Deserialize, Serialize};
#[non_exhaustive]
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct SearchResponse {
#[serde(default)]
pub hits: Vec<SearchHit>,
}
impl SearchResponse {
pub fn new(hits: Vec<SearchHit>) -> Self {
Self { hits }
}
pub fn empty() -> Self {
Self { hits: Vec::new() }
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn empty_serializes_to_hits_array() {
let r = SearchResponse::empty();
let json = serde_json::to_string(&r).unwrap();
assert_eq!(json, r#"{"hits":[]}"#);
}
#[test]
fn empty_deserializes_from_empty_hits() {
let r: SearchResponse = serde_json::from_str(r#"{"hits":[]}"#).unwrap();
assert!(r.hits.is_empty());
}
#[test]
fn deserializes_from_empty_object() {
let r: SearchResponse = serde_json::from_str("{}").unwrap();
assert!(r.hits.is_empty());
}
#[test]
fn new_constructor_sets_hits() {
let r = SearchResponse::new(vec![]);
assert!(r.hits.is_empty());
let r2 = SearchResponse::empty();
assert_eq!(r, r2);
}
#[test]
fn send_sync_clone_debug() {
fn assert<T: Send + Sync + Clone + std::fmt::Debug>() {}
assert::<SearchResponse>();
}
}