arch_pkg_db/text/archive/
uncompressed.rs

1use super::{mime::SupportedUncompressedArchiveType, tar::LoadTarError};
2use crate::TextCollection;
3use derive_more::{Display, Error};
4
5/// Error when trying to load data from an uncompressed archive.
6#[derive(Debug, Display, Error)]
7pub enum LoadUncompressedArchiveError {
8    #[display("Cannot detect mime type")]
9    GetMime,
10    #[display("Mime type not supported: {_0}")]
11    UnsupportedMimeType(#[error(not(source))] &'static str),
12    Tar(LoadTarError),
13}
14
15impl TextCollection {
16    /// Detect the mime type of an uncompressed archive, traverse it, and add contents from
17    /// its `desc` files to the text collection.
18    pub(super) fn extend_from_uncompressed_archive(
19        &mut self,
20        bytes: &[u8],
21    ) -> Result<(), LoadUncompressedArchiveError> {
22        match SupportedUncompressedArchiveType::check(bytes) {
23            Ok(SupportedUncompressedArchiveType::Tar) => self
24                .extend_from_tar(bytes)
25                .map_err(LoadUncompressedArchiveError::Tar),
26            Err(Some(mime)) => Err(LoadUncompressedArchiveError::UnsupportedMimeType(mime)),
27            Err(None) => Err(LoadUncompressedArchiveError::GetMime),
28        }
29    }
30}