use crate::server::error::MurError;
use crate::server::http::request::MurRequestContext;
use std::future::Future;
use std::pin::Pin;

pub trait MurExtractor: Sized + Send {
	type Error: Into<MurError>;

	fn extract(
		ctx: &MurRequestContext,
	) -> Pin<Box<dyn Future<Output = Result<Self, Self::Error>> + Send + '_>>;
}

pub trait MurExtractorSync: Sized + Send {
	type Error: Into<MurError>;

	fn extract_sync(ctx: &MurRequestContext) -> Result<Self, Self::Error>;
}
