Rename crate to tokio

This commit is contained in:
Carl Lerche 2017-10-24 16:30:16 -07:00 committed by Alex Crichton
parent 25f30c91c4
commit 36aaaa1520
30 changed files with 92 additions and 92 deletions

View File

@ -1,11 +1,11 @@
[package] [package]
name = "tokio-core" name = "tokio"
version = "0.1.10" version = "0.1.0"
authors = ["Alex Crichton <alex@alexcrichton.com>"] authors = ["Tokio Authors <authors@tokio.rs>"]
license = "MIT/Apache-2.0" license = "MIT/Apache-2.0"
repository = "https://github.com/tokio-rs/tokio-core" repository = "https://github.com/tokio-rs/tokio"
homepage = "https://tokio.rs" homepage = "https://tokio.rs"
documentation = "https://docs.rs/tokio-core/0.1" documentation = "https://docs.rs/tokio/0.1"
description = """ description = """
Core I/O and event loop primitives for asynchronous I/O in Rust. Foundation for Core I/O and event loop primitives for asynchronous I/O in Rust. Foundation for
the rest of the tokio crates. the rest of the tokio crates.
@ -13,8 +13,8 @@ the rest of the tokio crates.
categories = ["asynchronous"] categories = ["asynchronous"]
[badges] [badges]
travis-ci = { repository = "tokio-rs/tokio-core" } travis-ci = { repository = "tokio-rs/tokio" }
appveyor = { repository = "alexcrichton/tokio-core" } appveyor = { repository = "alexcrichton/tokio" }
[dependencies] [dependencies]
bytes = "0.4" bytes = "0.4"

View File

@ -22,7 +22,7 @@ tokio-core = "0.1"
Next, add this to your crate: Next, add this to your crate:
```rust ```rust
extern crate tokio_core; extern crate tokio;
``` ```
You can find extensive documentation and examples about how to use this crate You can find extensive documentation and examples about how to use this crate

View File

@ -4,7 +4,7 @@
extern crate test; extern crate test;
extern crate futures; extern crate futures;
#[macro_use] #[macro_use]
extern crate tokio_core; extern crate tokio;
use std::io; use std::io;
use std::net::SocketAddr; use std::net::SocketAddr;
@ -14,8 +14,8 @@ use futures::sync::oneshot;
use futures::sync::mpsc; use futures::sync::mpsc;
use futures::{Future, Poll, Sink, Stream}; use futures::{Future, Poll, Sink, Stream};
use test::Bencher; use test::Bencher;
use tokio_core::net::UdpSocket; use tokio::net::UdpSocket;
use tokio_core::reactor::Core; use tokio::reactor::Core;
/// UDP echo server /// UDP echo server
struct EchoServer { struct EchoServer {
@ -61,7 +61,7 @@ fn udp_echo_latency(b: &mut Bencher) {
let mut l = Core::new().unwrap(); let mut l = Core::new().unwrap();
let handle = l.handle(); let handle = l.handle();
let socket = tokio_core::net::UdpSocket::bind(&any_addr, &handle).unwrap(); let socket = tokio::net::UdpSocket::bind(&any_addr, &handle).unwrap();
tx.complete(socket.local_addr().unwrap()); tx.complete(socket.local_addr().unwrap());
let server = EchoServer::new(socket); let server = EchoServer::new(socket);

View File

@ -1,7 +1,7 @@
#![feature(test)] #![feature(test)]
extern crate futures; extern crate futures;
extern crate tokio_core; extern crate tokio;
#[macro_use] #[macro_use]
extern crate tokio_io; extern crate tokio_io;
@ -10,8 +10,8 @@ pub extern crate test;
mod prelude { mod prelude {
pub use futures::*; pub use futures::*;
pub use tokio_core::reactor::Core; pub use tokio::reactor::Core;
pub use tokio_core::net::{TcpListener, TcpStream}; pub use tokio::net::{TcpListener, TcpStream};
pub use tokio_io::io::read_to_end; pub use tokio_io::io::read_to_end;
pub use test::{self, Bencher}; pub use test::{self, Bencher};

View File

@ -1,7 +1,7 @@
## Examples of `tokio-core` ## Examples of `tokio-core`
This directory contains a number of examples showcasing various capabilities of This directory contains a number of examples showcasing various capabilities of
the `tokio_core` crate. Most of these examples also leverage the `futures` and the `tokio` crate. Most of these examples also leverage the `futures` and
`tokio_io` crates, along with a number of other miscellaneous dependencies for `tokio_io` crates, along with a number of other miscellaneous dependencies for
various tasks. various tasks.
@ -15,7 +15,7 @@ A high level description of each example is:
* `hello` - a tiny server that simply writes "Hello!" to all connected clients * `hello` - a tiny server that simply writes "Hello!" to all connected clients
and then terminates the connection, should help see how to create and and then terminates the connection, should help see how to create and
initialize `tokio_core`. initialize `tokio`.
* `echo` - this is your standard TCP "echo server" which simply accepts * `echo` - this is your standard TCP "echo server" which simply accepts
connections and then echos back any contents that are read from each connected connections and then echos back any contents that are read from each connected
client. client.

View File

@ -18,7 +18,7 @@
//! messages. //! messages.
extern crate futures; extern crate futures;
extern crate tokio_core; extern crate tokio;
extern crate tokio_io; extern crate tokio_io;
use std::collections::HashMap; use std::collections::HashMap;
@ -30,8 +30,8 @@ use std::io::{Error, ErrorKind, BufReader};
use futures::Future; use futures::Future;
use futures::stream::{self, Stream}; use futures::stream::{self, Stream};
use tokio_core::net::TcpListener; use tokio::net::TcpListener;
use tokio_core::reactor::Core; use tokio::reactor::Core;
use tokio_io::io; use tokio_io::io;
use tokio_io::AsyncRead; use tokio_io::AsyncRead;

View File

@ -21,7 +21,7 @@
extern crate futures; extern crate futures;
extern crate futures_cpupool; extern crate futures_cpupool;
extern crate flate2; extern crate flate2;
extern crate tokio_core; extern crate tokio;
extern crate tokio_io; extern crate tokio_io;
use std::io; use std::io;
@ -30,8 +30,8 @@ use std::net::SocketAddr;
use futures::{Future, Stream, Poll}; use futures::{Future, Stream, Poll};
use futures_cpupool::CpuPool; use futures_cpupool::CpuPool;
use tokio_core::net::{TcpListener, TcpStream}; use tokio::net::{TcpListener, TcpStream};
use tokio_core::reactor::Core; use tokio::reactor::Core;
use tokio_io::{AsyncRead, AsyncWrite}; use tokio_io::{AsyncRead, AsyncWrite};
use flate2::write::GzEncoder; use flate2::write::GzEncoder;

View File

@ -15,7 +15,7 @@
//! stdin/stdout to a server" to get up and running. //! stdin/stdout to a server" to get up and running.
extern crate futures; extern crate futures;
extern crate tokio_core; extern crate tokio;
extern crate tokio_io; extern crate tokio_io;
extern crate bytes; extern crate bytes;
@ -26,7 +26,7 @@ use std::thread;
use futures::sync::mpsc; use futures::sync::mpsc;
use futures::{Sink, Future, Stream}; use futures::{Sink, Future, Stream};
use tokio_core::reactor::Core; use tokio::reactor::Core;
fn main() { fn main() {
// Determine if we're going to run in TCP or UDP mode // Determine if we're going to run in TCP or UDP mode
@ -83,8 +83,8 @@ mod tcp {
use bytes::{BufMut, BytesMut}; use bytes::{BufMut, BytesMut};
use futures::{Future, Stream}; use futures::{Future, Stream};
use tokio_core::net::TcpStream; use tokio::net::TcpStream;
use tokio_core::reactor::Handle; use tokio::reactor::Handle;
use tokio_io::AsyncRead; use tokio_io::AsyncRead;
use tokio_io::codec::{Encoder, Decoder}; use tokio_io::codec::{Encoder, Decoder};
@ -167,8 +167,8 @@ mod udp {
use bytes::BytesMut; use bytes::BytesMut;
use futures::{Future, Stream}; use futures::{Future, Stream};
use tokio_core::net::{UdpCodec, UdpSocket}; use tokio::net::{UdpCodec, UdpSocket};
use tokio_core::reactor::Handle; use tokio::reactor::Handle;
pub fn connect(&addr: &SocketAddr, pub fn connect(&addr: &SocketAddr,
handle: &Handle, handle: &Handle,

View File

@ -15,7 +15,7 @@
extern crate futures; extern crate futures;
extern crate num_cpus; extern crate num_cpus;
extern crate tokio_core; extern crate tokio;
extern crate tokio_io; extern crate tokio_io;
use std::env; use std::env;
@ -27,8 +27,8 @@ use futures::stream::Stream;
use futures::sync::mpsc; use futures::sync::mpsc;
use tokio_io::AsyncRead; use tokio_io::AsyncRead;
use tokio_io::io::copy; use tokio_io::io::copy;
use tokio_core::net::TcpStream; use tokio::net::TcpStream;
use tokio_core::reactor::Core; use tokio::reactor::Core;
fn main() { fn main() {
// First argument, the address to bind // First argument, the address to bind
@ -72,7 +72,7 @@ fn worker(rx: mpsc::UnboundedReceiver<net::TcpStream>) {
let done = rx.for_each(move |socket| { let done = rx.for_each(move |socket| {
// First up when we receive a socket we associate it with our event loop // First up when we receive a socket we associate it with our event loop
// using the `TcpStream::from_stream` API. After that the socket is not // using the `TcpStream::from_stream` API. After that the socket is not
// a `tokio_core::net::TcpStream` meaning it's in nonblocking mode and // a `tokio::net::TcpStream` meaning it's in nonblocking mode and
// ready to be used with Tokio // ready to be used with Tokio
let socket = TcpStream::from_stream(socket, &handle) let socket = TcpStream::from_stream(socket, &handle)
.expect("failed to associate TCP stream"); .expect("failed to associate TCP stream");

View File

@ -12,14 +12,14 @@
extern crate futures; extern crate futures;
#[macro_use] #[macro_use]
extern crate tokio_core; extern crate tokio;
use std::{env, io}; use std::{env, io};
use std::net::SocketAddr; use std::net::SocketAddr;
use futures::{Future, Poll}; use futures::{Future, Poll};
use tokio_core::net::UdpSocket; use tokio::net::UdpSocket;
use tokio_core::reactor::Core; use tokio::reactor::Core;
struct Server { struct Server {
socket: UdpSocket, socket: UdpSocket,

View File

@ -18,7 +18,7 @@
//! should be able to see them all make progress simultaneously. //! should be able to see them all make progress simultaneously.
extern crate futures; extern crate futures;
extern crate tokio_core; extern crate tokio;
extern crate tokio_io; extern crate tokio_io;
use std::env; use std::env;
@ -28,8 +28,8 @@ use futures::Future;
use futures::stream::Stream; use futures::stream::Stream;
use tokio_io::AsyncRead; use tokio_io::AsyncRead;
use tokio_io::io::copy; use tokio_io::io::copy;
use tokio_core::net::TcpListener; use tokio::net::TcpListener;
use tokio_core::reactor::Core; use tokio::reactor::Core;
fn main() { fn main() {
// Allow passing an address to listen on as the first argument of this // Allow passing an address to listen on as the first argument of this

View File

@ -13,15 +13,15 @@
extern crate env_logger; extern crate env_logger;
extern crate futures; extern crate futures;
extern crate tokio_core; extern crate tokio;
extern crate tokio_io; extern crate tokio_io;
use std::env; use std::env;
use std::net::SocketAddr; use std::net::SocketAddr;
use futures::stream::Stream; use futures::stream::Stream;
use tokio_core::reactor::Core; use tokio::reactor::Core;
use tokio_core::net::TcpListener; use tokio::net::TcpListener;
fn main() { fn main() {
env_logger::init().unwrap(); env_logger::init().unwrap();

View File

@ -17,7 +17,7 @@
//! the echo server, and you'll be able to see data flowing between them. //! the echo server, and you'll be able to see data flowing between them.
extern crate futures; extern crate futures;
extern crate tokio_core; extern crate tokio;
extern crate tokio_io; extern crate tokio_io;
use std::sync::Arc; use std::sync::Arc;
@ -27,8 +27,8 @@ use std::io::{self, Read, Write};
use futures::stream::Stream; use futures::stream::Stream;
use futures::{Future, Poll}; use futures::{Future, Poll};
use tokio_core::net::{TcpListener, TcpStream}; use tokio::net::{TcpListener, TcpStream};
use tokio_core::reactor::Core; use tokio::reactor::Core;
use tokio_io::{AsyncRead, AsyncWrite}; use tokio_io::{AsyncRead, AsyncWrite};
use tokio_io::io::{copy, shutdown}; use tokio_io::io::{copy, shutdown};

View File

@ -17,7 +17,7 @@
extern crate env_logger; extern crate env_logger;
extern crate futures; extern crate futures;
extern crate tokio_core; extern crate tokio;
extern crate tokio_io; extern crate tokio_io;
use std::env; use std::env;
@ -27,8 +27,8 @@ use std::net::SocketAddr;
use futures::Future; use futures::Future;
use futures::stream::{self, Stream}; use futures::stream::{self, Stream};
use tokio_io::IoFuture; use tokio_io::IoFuture;
use tokio_core::net::{TcpListener, TcpStream}; use tokio::net::{TcpListener, TcpStream};
use tokio_core::reactor::Core; use tokio::reactor::Core;
fn main() { fn main() {
env_logger::init().unwrap(); env_logger::init().unwrap();

View File

@ -40,7 +40,7 @@
//! returning the previous value, if any. //! returning the previous value, if any.
extern crate futures; extern crate futures;
extern crate tokio_core; extern crate tokio;
extern crate tokio_io; extern crate tokio_io;
use std::cell::RefCell; use std::cell::RefCell;
@ -51,8 +51,8 @@ use std::env;
use std::net::SocketAddr; use std::net::SocketAddr;
use futures::prelude::*; use futures::prelude::*;
use tokio_core::net::TcpListener; use tokio::net::TcpListener;
use tokio_core::reactor::Core; use tokio::reactor::Core;
use tokio_io::AsyncRead; use tokio_io::AsyncRead;
use tokio_io::io::{lines, write_all}; use tokio_io::io::{lines, write_all};

View File

@ -20,7 +20,7 @@ extern crate num_cpus;
extern crate serde_derive; extern crate serde_derive;
extern crate serde_json; extern crate serde_json;
extern crate time; extern crate time;
extern crate tokio_core; extern crate tokio;
extern crate tokio_io; extern crate tokio_io;
use std::env; use std::env;
@ -35,8 +35,8 @@ use futures::sync::mpsc;
use futures::{Stream, Future, Sink}; use futures::{Stream, Future, Sink};
use http::{Request, Response, StatusCode}; use http::{Request, Response, StatusCode};
use http::header::HeaderValue; use http::header::HeaderValue;
use tokio_core::net::TcpStream; use tokio::net::TcpStream;
use tokio_core::reactor::Core; use tokio::reactor::Core;
use tokio_io::codec::{Encoder, Decoder}; use tokio_io::codec::{Encoder, Decoder};
use tokio_io::{AsyncRead}; use tokio_io::{AsyncRead};

View File

@ -6,7 +6,7 @@
//! new message with a new destination. Overall, we then use this to construct a //! new message with a new destination. Overall, we then use this to construct a
//! "ping pong" pair where two sockets are sending messages back and forth. //! "ping pong" pair where two sockets are sending messages back and forth.
extern crate tokio_core; extern crate tokio;
extern crate env_logger; extern crate env_logger;
extern crate futures; extern crate futures;
@ -14,8 +14,8 @@ use std::io;
use std::net::SocketAddr; use std::net::SocketAddr;
use futures::{Future, Stream, Sink}; use futures::{Future, Stream, Sink};
use tokio_core::net::{UdpSocket, UdpCodec}; use tokio::net::{UdpSocket, UdpCodec};
use tokio_core::reactor::Core; use tokio::reactor::Core;
pub struct LineCodec; pub struct LineCodec;

View File

@ -43,14 +43,14 @@
//! //!
//! ```no_run //! ```no_run
//! extern crate futures; //! extern crate futures;
//! extern crate tokio_core; //! extern crate tokio;
//! extern crate tokio_io; //! extern crate tokio_io;
//! //!
//! use futures::{Future, Stream}; //! use futures::{Future, Stream};
//! use tokio_io::AsyncRead; //! use tokio_io::AsyncRead;
//! use tokio_io::io::copy; //! use tokio_io::io::copy;
//! use tokio_core::net::TcpListener; //! use tokio::net::TcpListener;
//! use tokio_core::reactor::Core; //! use tokio::reactor::Core;
//! //!
//! fn main() { //! fn main() {
//! // Create the event loop that will drive this server //! // Create the event loop that will drive this server

View File

@ -1,6 +1,6 @@
extern crate env_logger; extern crate env_logger;
extern crate futures; extern crate futures;
extern crate tokio_core; extern crate tokio;
extern crate tokio_io; extern crate tokio_io;
use std::net::TcpStream; use std::net::TcpStream;
@ -10,8 +10,8 @@ use std::io::{Read, Write, BufReader, BufWriter};
use futures::Future; use futures::Future;
use futures::stream::Stream; use futures::stream::Stream;
use tokio_io::io::copy; use tokio_io::io::copy;
use tokio_core::net::TcpListener; use tokio::net::TcpListener;
use tokio_core::reactor::Core; use tokio::reactor::Core;
macro_rules! t { macro_rules! t {
($e:expr) => (match $e { ($e:expr) => (match $e {

View File

@ -1,5 +1,5 @@
extern crate futures; extern crate futures;
extern crate tokio_core; extern crate tokio;
extern crate tokio_io; extern crate tokio_io;
use std::net::TcpStream; use std::net::TcpStream;
@ -9,8 +9,8 @@ use std::io::{Write, Read};
use futures::Future; use futures::Future;
use futures::stream::Stream; use futures::stream::Stream;
use tokio_io::io::read_to_end; use tokio_io::io::read_to_end;
use tokio_core::net::TcpListener; use tokio::net::TcpListener;
use tokio_core::reactor::Core; use tokio::reactor::Core;
macro_rules! t { macro_rules! t {
($e:expr) => (match $e { ($e:expr) => (match $e {

View File

@ -1,6 +1,6 @@
extern crate env_logger; extern crate env_logger;
extern crate futures; extern crate futures;
extern crate tokio_core; extern crate tokio;
extern crate tokio_io; extern crate tokio_io;
use std::io::{Read, Write}; use std::io::{Read, Write};
@ -9,8 +9,8 @@ use std::thread;
use futures::Future; use futures::Future;
use futures::stream::Stream; use futures::stream::Stream;
use tokio_core::net::TcpListener; use tokio::net::TcpListener;
use tokio_core::reactor::Core; use tokio::reactor::Core;
use tokio_io::AsyncRead; use tokio_io::AsyncRead;
use tokio_io::io::copy; use tokio_io::io::copy;

View File

@ -1,11 +1,11 @@
extern crate env_logger; extern crate env_logger;
extern crate futures; extern crate futures;
extern crate tokio_core; extern crate tokio;
use std::time::{Instant, Duration}; use std::time::{Instant, Duration};
use futures::stream::{Stream}; use futures::stream::{Stream};
use tokio_core::reactor::{Core, Interval}; use tokio::reactor::{Core, Interval};
macro_rules! t { macro_rules! t {
($e:expr) => (match $e { ($e:expr) => (match $e {

View File

@ -1,5 +1,5 @@
extern crate futures; extern crate futures;
extern crate tokio_core; extern crate tokio;
extern crate tokio_io; extern crate tokio_io;
use std::net::TcpStream; use std::net::TcpStream;
@ -9,8 +9,8 @@ use std::io::{Write, Read};
use futures::Future; use futures::Future;
use futures::stream::Stream; use futures::stream::Stream;
use tokio_io::io::read_to_end; use tokio_io::io::read_to_end;
use tokio_core::net::TcpListener; use tokio::net::TcpListener;
use tokio_core::reactor::Core; use tokio::reactor::Core;
macro_rules! t { macro_rules! t {
($e:expr) => (match $e { ($e:expr) => (match $e {

View File

@ -1,6 +1,6 @@
extern crate env_logger; extern crate env_logger;
extern crate futures; extern crate futures;
extern crate tokio_core; extern crate tokio;
extern crate tokio_io; extern crate tokio_io;
extern crate bytes; extern crate bytes;
@ -9,8 +9,8 @@ use std::net::Shutdown;
use bytes::{BytesMut, BufMut}; use bytes::{BytesMut, BufMut};
use futures::{Future, Stream, Sink}; use futures::{Future, Stream, Sink};
use tokio_core::net::{TcpListener, TcpStream}; use tokio::net::{TcpListener, TcpStream};
use tokio_core::reactor::Core; use tokio::reactor::Core;
use tokio_io::codec::{Encoder, Decoder}; use tokio_io::codec::{Encoder, Decoder};
use tokio_io::io::{write_all, read}; use tokio_io::io::{write_all, read};
use tokio_io::AsyncRead; use tokio_io::AsyncRead;

View File

@ -4,7 +4,7 @@ extern crate env_logger;
extern crate futures; extern crate futures;
extern crate libc; extern crate libc;
extern crate mio; extern crate mio;
extern crate tokio_core; extern crate tokio;
extern crate tokio_io; extern crate tokio_io;
use std::fs::File; use std::fs::File;
@ -16,7 +16,7 @@ use std::time::Duration;
use mio::unix::{UnixReady, EventedFd}; use mio::unix::{UnixReady, EventedFd};
use mio::{PollOpt, Ready, Token}; use mio::{PollOpt, Ready, Token};
use mio::event::Evented; use mio::event::Evented;
use tokio_core::reactor::{Core, PollEvented}; use tokio::reactor::{Core, PollEvented};
use tokio_io::io::read_to_end; use tokio_io::io::read_to_end;
macro_rules! t { macro_rules! t {

View File

@ -1,4 +1,4 @@
extern crate tokio_core; extern crate tokio;
extern crate env_logger; extern crate env_logger;
extern crate futures; extern crate futures;
@ -10,7 +10,7 @@ use std::time::Duration;
use futures::{Future, Poll}; use futures::{Future, Poll};
use futures::future; use futures::future;
use futures::sync::oneshot; use futures::sync::oneshot;
use tokio_core::reactor::{Core, Timeout}; use tokio::reactor::{Core, Timeout};
#[test] #[test]
fn simple() { fn simple() {

View File

@ -1,6 +1,6 @@
extern crate env_logger; extern crate env_logger;
extern crate futures; extern crate futures;
extern crate tokio_core; extern crate tokio;
extern crate tokio_io; extern crate tokio_io;
use std::io::{Read, Write}; use std::io::{Read, Write};
@ -11,8 +11,8 @@ use futures::Future;
use futures::stream::Stream; use futures::stream::Stream;
use tokio_io::io::copy; use tokio_io::io::copy;
use tokio_io::AsyncRead; use tokio_io::AsyncRead;
use tokio_core::net::TcpListener; use tokio::net::TcpListener;
use tokio_core::reactor::Core; use tokio::reactor::Core;
macro_rules! t { macro_rules! t {
($e:expr) => (match $e { ($e:expr) => (match $e {

View File

@ -1,6 +1,6 @@
extern crate env_logger; extern crate env_logger;
extern crate futures; extern crate futures;
extern crate tokio_core; extern crate tokio;
use std::net; use std::net;
use std::sync::mpsc::channel; use std::sync::mpsc::channel;
@ -8,8 +8,8 @@ use std::thread;
use futures::Future; use futures::Future;
use futures::stream::Stream; use futures::stream::Stream;
use tokio_core::reactor::Core; use tokio::reactor::Core;
use tokio_core::net::{TcpListener, TcpStream}; use tokio::net::{TcpListener, TcpStream};
macro_rules! t { macro_rules! t {
($e:expr) => (match $e { ($e:expr) => (match $e {

View File

@ -1,10 +1,10 @@
extern crate env_logger; extern crate env_logger;
extern crate futures; extern crate futures;
extern crate tokio_core; extern crate tokio;
use std::time::{Instant, Duration}; use std::time::{Instant, Duration};
use tokio_core::reactor::{Core, Timeout}; use tokio::reactor::{Core, Timeout};
macro_rules! t { macro_rules! t {
($e:expr) => (match $e { ($e:expr) => (match $e {

View File

@ -1,13 +1,13 @@
extern crate futures; extern crate futures;
#[macro_use] #[macro_use]
extern crate tokio_core; extern crate tokio;
use std::io; use std::io;
use std::net::SocketAddr; use std::net::SocketAddr;
use futures::{Future, Poll, Stream, Sink}; use futures::{Future, Poll, Stream, Sink};
use tokio_core::net::{UdpSocket, UdpCodec}; use tokio::net::{UdpSocket, UdpCodec};
use tokio_core::reactor::Core; use tokio::reactor::Core;
macro_rules! t { macro_rules! t {
($e:expr) => (match $e { ($e:expr) => (match $e {