// TODO:
// - Consider splitting up the trait into Consume / Produce.
// - Break up SyncQueue from Queue
pubtraitQueue<T: Send> {/// Retrieves and removes the head of this queue or returns None if the
/// queue is empty.
fnpoll(&self)->Option<T>;/// Returns true if the underlying data structure does not contain any
/// elements.
fnis_empty(&self)->bool;fnoffer(&self, e: T)->Result<(), T>;}pubtraitSyncQueue<T: Send> : Queue<T> {/// Retrieves and removes the head of this queue, waiting if necessary
/// until an element becomes available.
fntake(&self)-> T;fnput(&self, e: T);}