use std::fmt;
use std::pin::Pin;
use futures::{Future, Stream};
use tc_error::*;
pub use id::*;
pub use map::*;
pub use time::*;
pub use tuple::*;
mod id;
mod map;
mod time;
mod tuple;
pub type TCBoxFuture<'a, T> = Pin<Box<dyn Future<Output = T> + Send + 'a>>;
pub type TCBoxTryFuture<'a, T> = Pin<Box<dyn Future<Output = TCResult<T>> + Send + 'a>>;
pub type TCBoxStream<'a, T> = Pin<Box<dyn Stream<Item = T> + Send + Unpin + 'a>>;
pub type TCBoxTryStream<'a, T> = Pin<Box<dyn Stream<Item = TCResult<T>> + Send + Unpin + 'a>>;
pub trait Class: fmt::Display + Sized {}
pub trait NativeClass: Class {
fn from_path(path: &[PathSegment]) -> Option<Self>;
fn path(&self) -> TCPathBuf;
}
pub trait Instance: Send + Sync {
type Class: Class;
fn class(&self) -> Self::Class;
}