use reqwest::StatusCode;
use serde::Deserialize;
use crate::{error::EsError, Client, EsResponse};
use super::common::{OptionVal, Options};
#[derive(Debug)]
pub struct DeleteOperation<'a, 'b> {
client: &'a mut Client,
index: &'b str,
doc_type: &'b str,
id: &'b str,
options: Options<'b>,
}
impl<'a, 'b> DeleteOperation<'a, 'b> {
pub fn new(
client: &'a mut Client,
index: &'b str,
doc_type: &'b str,
id: &'b str,
) -> DeleteOperation<'a, 'b> {
DeleteOperation {
client,
index,
doc_type,
id,
options: Options::default(),
}
}
add_option!(with_version, "version");
add_option!(with_version_type, "version_type");
add_option!(with_routing, "routing");
add_option!(with_parent, "parent");
add_option!(with_consistency, "consistency");
add_option!(with_refresh, "refresh");
add_option!(with_timeout, "timeout");
pub fn send(&'a mut self) -> Result<DeleteResult, EsError> {
let url = format!(
"/{}/{}/{}{}",
self.index, self.doc_type, self.id, self.options
);
let response = self.client.delete_op(&url)?;
match response.status_code() {
StatusCode::OK => Ok(response.read_response()?),
status_code => Err(EsError::EsError(format!(
"Unexpected status: {}",
status_code
))),
}
}
}
impl Client {
pub fn delete<'a>(
&'a mut self,
index: &'a str,
doc_type: &'a str,
id: &'a str,
) -> DeleteOperation {
DeleteOperation::new(self, index, doc_type, id)
}
}
#[derive(Debug, Deserialize)]
pub struct DeleteResult {
pub found: bool,
#[serde(rename = "_index")]
pub index: String,
#[serde(rename = "_type")]
pub doc_type: String,
#[serde(rename = "_id")]
pub id: String,
#[serde(rename = "_version")]
pub version: u64,
}
#[cfg(test)]
pub mod tests {
use crate::tests::{clean_db, make_client, TestDocument};
#[test]
fn test_delete() {
let index_name = "test_delete";
let mut client = make_client();
clean_db(&mut client, index_name);
let id = {
let doc = TestDocument::new().with_int_field(4);
let result = client
.index(index_name, "test_type")
.with_doc(&doc)
.send()
.unwrap();
result.id
};
let delete_result = client.delete(index_name, "test_type", &id).send().unwrap();
assert_eq!(id, delete_result.id);
assert_eq!(true, delete_result.found);
}
}