use serde::Serialize;
use super::Document;
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize)]
pub enum SearchFilter {
RfcsOnly,
DraftsOnly,
#[default]
Both,
}
impl SearchFilter {
pub fn api_param(&self) -> Option<&'static str> {
match self {
SearchFilter::RfcsOnly => Some("rfc"),
SearchFilter::DraftsOnly => Some("draft"),
SearchFilter::Both => None,
}
}
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct SearchResult {
pub documents: Vec<Document>,
pub has_more: bool,
pub total_count: Option<u32>,
pub query: String,
pub filter: SearchFilter,
}
impl SearchResult {
#[must_use]
pub fn is_empty(&self) -> bool {
self.documents.is_empty()
}
#[must_use]
pub fn len(&self) -> usize {
self.documents.len()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_search_filter_api_param() {
assert_eq!(SearchFilter::RfcsOnly.api_param(), Some("rfc"));
assert_eq!(SearchFilter::DraftsOnly.api_param(), Some("draft"));
assert_eq!(SearchFilter::Both.api_param(), None);
}
#[test]
fn test_search_filter_default() {
assert_eq!(SearchFilter::default(), SearchFilter::Both);
}
#[test]
fn test_search_result_default() {
let result = SearchResult::default();
assert!(result.is_empty());
assert_eq!(result.len(), 0);
assert!(!result.has_more);
assert!(result.query.is_empty());
assert_eq!(result.filter, SearchFilter::Both);
}
}