use std::fmt::Debug;
use std::str::FromStr;
use futures_core::future::BoxFuture;
use url::Url;
use crate::error::Error;
pub trait Connection: 'static + Send {
type Options: ConnectOptions<Connection=Self>;
fn close(self) -> BoxFuture<'static, Result<(), Error>>;
fn close_hard(self) -> BoxFuture<'static, Result<(), Error>>;
fn ping(&mut self) -> BoxFuture<'_, Result<(), Error>>;
}
pub trait ConnectOptions: 'static + Send + Sync + FromStr<Err=Error> + Debug + Clone {
type Connection: Connection + ?Sized;
fn from_url(url: &Url) -> Result<Self, Error>;
fn connect(&self) -> BoxFuture<'_, Result<Self::Connection, Error>>
where
Self::Connection: Sized;
}