use serde::{Deserialize, Serialize};
use crate::config::ParseConfig;
use crate::error::EthosError;
use crate::model::{Element, Page, Region, Span, Warning};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct BackendManifest {
pub id: String,
pub phase: u8,
pub version: String,
pub platform_sha256: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Extraction {
pub pages: Vec<Page>,
pub spans: Vec<Span>,
pub regions: Vec<Region>,
pub warnings: Vec<Warning>,
}
pub trait EthosPdfBackend {
fn manifest(&self) -> BackendManifest;
fn page_count(&self, pdf_bytes: &[u8]) -> Result<u32, EthosError>;
fn extract(&self, pdf_bytes: &[u8], config: &ParseConfig) -> Result<Extraction, EthosError>;
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct LayoutOutput {
pub elements: Vec<Element>,
pub warnings: Vec<Warning>,
}
pub trait LayoutEngine {
fn layout(&self, extraction: &Extraction) -> Result<LayoutOutput, EthosError>;
}