turntable 0.0.1

Turntable is unpkg copy
Documentation
use std::path::PathBuf;

use bytes::Bytes;

use mime_guess::mime::Mime;
use poem::{FromRequest, Request, RequestBody};
use tokio_tar::EntryType;

#[derive(Debug, Clone)]
pub struct Entry {
  pub path: PathBuf,
  pub entry_type: EntryType,
  pub content_type: Mime,
  pub integrity: String,
  pub last_modified: String,
  pub size: u64,
  pub content: Bytes,
}

impl Default for Entry {
  fn default() -> Self {
    Self {
      path: Default::default(),
      entry_type: EntryType::Regular,
      content_type: mime_guess::mime::TEXT_PLAIN,
      integrity: Default::default(),
      last_modified: Default::default(),
      size: Default::default(),
      content: Default::default(),
    }
  }
}

#[poem::async_trait]
impl<'a> FromRequest<'a> for &'a Entry {
  async fn from_request(req: &'a Request, _: &mut RequestBody) -> poem::Result<Self> {
    req
      .extensions()
      .get::<Entry>()
      .ok_or(anyhow::anyhow!("get entry from the request extensions"))
      .map_err(Into::into)
  }
}