use crate::error::{DependencyResolutionError, ExtractionError};
use crate::library_metadata::{LibraryMetadata, LibraryMetadataError};
use crate::types::Namespace;
use std::path::{Path, PathBuf};
use tree_sitter::{Language, Parser};
pub trait Extractor<EntryPoint> {
fn get_parser_language(&self) -> Language;
fn get_library_metadata(
&self,
path: &Path,
) -> Result<LibraryMetadata<EntryPoint>, LibraryMetadataError>;
fn extract_public_api(
&self,
metadata: &LibraryMetadata<EntryPoint>,
parser: &mut Parser,
) -> Result<Vec<Namespace>, ExtractionError>;
fn resolve_dependency_path(
&self,
dependency_name: &str,
dependant_path: &Path,
) -> Result<PathBuf, DependencyResolutionError>;
}