use crate::error::GraphQLError;
#[derive(Debug)]
pub struct Response<T> {
data: Option<T>,
errors: Vec<GraphQLError>,
}
impl<T> Response<T> {
pub(crate) fn new(data: Option<T>, errors: Vec<GraphQLError>) -> Self {
Self { data, errors }
}
pub fn data(&self) -> Option<&T> {
self.data.as_ref()
}
pub fn into_data(self) -> Option<T> {
self.data
}
pub fn has_errors(&self) -> bool {
!self.errors.is_empty()
}
pub fn errors(&self) -> &[GraphQLError] {
&self.errors
}
}
#[cfg(test)]
mod tests {
use super::*;
fn make_error() -> GraphQLError {
serde_json::from_value(serde_json::json!({
"message": "test error",
"path": ["field"]
}))
.unwrap()
}
#[test]
fn test_response_no_errors() {
let response: Response<String> = Response::new(Some("data".to_string()), vec![]);
assert!(!response.has_errors());
assert!(response.errors().is_empty());
}
#[test]
fn test_response_with_errors() {
let response: Response<String> =
Response::new(Some("data".to_string()), vec![make_error()]);
assert!(response.has_errors());
assert_eq!(response.errors().len(), 1);
}
}