objectstore_client/
head.rs1use objectstore_types::metadata::Metadata;
2use reqwest::StatusCode;
3
4use crate::{ObjectKey, Session};
5
6pub type HeadResponse = Option<Metadata>;
10
11impl Session {
12 pub fn head(&self, key: &str) -> HeadBuilder {
17 HeadBuilder {
18 session: self.clone(),
19 key: key.to_owned(),
20 }
21 }
22}
23
24#[derive(Debug)]
26pub struct HeadBuilder {
27 pub(crate) session: Session,
28 pub(crate) key: ObjectKey,
29}
30
31impl HeadBuilder {
32 pub async fn send(self) -> crate::Result<HeadResponse> {
34 let response = self
35 .session
36 .request(reqwest::Method::HEAD, &self.key)?
37 .send()
38 .await?;
39 if response.status() == StatusCode::NOT_FOUND {
40 return Ok(None);
41 }
42 let response = response.error_for_status()?;
43 let metadata = Metadata::from_headers(response.headers(), "")?;
44 Ok(Some(metadata))
45 }
46}