#[cfg(not(feature = "office"))]
use crate::KreuzbergError;
use crate::Result;
use crate::core::config::ExtractionConfig;
use crate::core::mime::{LEGACY_POWERPOINT_MIME_TYPE, LEGACY_WORD_MIME_TYPE};
use crate::types::ExtractionResult;
use super::file::extract_bytes_with_extractor;
#[cfg(feature = "otel")]
use super::file::record_error;
#[cfg_attr(feature = "otel", tracing::instrument(
skip(config, content),
fields(
extraction.mime_type = mime_type,
extraction.size_bytes = content.len(),
)
))]
pub async fn extract_bytes(content: &[u8], mime_type: &str, config: &ExtractionConfig) -> Result<ExtractionResult> {
use crate::core::mime;
let result = async {
let validated_mime = mime::validate_mime_type(mime_type)?;
#[cfg(not(feature = "office"))]
match validated_mime.as_str() {
LEGACY_WORD_MIME_TYPE => {
return Err(KreuzbergError::UnsupportedFormat(
"Legacy Word extraction requires the `office` feature".to_string(),
));
}
LEGACY_POWERPOINT_MIME_TYPE => {
return Err(KreuzbergError::UnsupportedFormat(
"Legacy PowerPoint extraction requires the `office` feature".to_string(),
));
}
_ => {}
}
#[cfg(feature = "office")]
{
let _ = LEGACY_WORD_MIME_TYPE;
let _ = LEGACY_POWERPOINT_MIME_TYPE;
}
extract_bytes_with_extractor(content, &validated_mime, config).await
}
.await;
#[cfg(feature = "otel")]
if let Err(ref e) = result {
record_error(e);
}
result
}