#![warn(missing_docs)]
#[cfg(feature = "csv_ds")]
mod csv;
#[cfg(feature = "gpkg_ds")]
mod gpkg;
#[cfg(feature = "pg_ds")]
mod pg;
#[cfg(any(feature = "gpkg_ds", feature = "pg_ds"))]
mod sql;
#[cfg(feature = "pg_ds")]
mod types;
#[cfg(feature = "csv_ds")]
pub use csv::*;
#[cfg(feature = "gpkg_ds")]
pub use gpkg::*;
#[cfg(feature = "pg_ds")]
pub use pg::*;
#[cfg(feature = "pg_ds")]
pub use types::*;
use crate::{Expression, Q};
use async_trait::async_trait;
use futures::stream::BoxStream;
use std::collections::HashMap;
pub type Resource = HashMap<String, Q>;
pub trait DataSource {
fn srid(&self) -> Option<u32>;
}
pub trait IterableDS {
type Item: TryInto<Resource, Error = Self::Err>;
type Err;
fn iter(&self) -> Result<impl Iterator<Item = Result<Self::Item, Self::Err>>, Self::Err>;
}
#[async_trait]
pub trait StreamableDS {
type Item: TryInto<Resource, Error = Self::Err>;
type Err;
async fn fetch(&self) -> Result<BoxStream<'_, Result<Self::Item, Self::Err>>, Self::Err>;
async fn stream(&self) -> Result<BoxStream<'_, Result<Resource, Self::Err>>, Self::Err>;
async fn fetch_where(
&self,
exp: &Expression,
) -> Result<BoxStream<'_, Result<Self::Item, Self::Err>>, Self::Err>;
async fn stream_where(
&self,
exp: &Expression,
) -> Result<BoxStream<'_, Result<Resource, Self::Err>>, Self::Err>;
}