# Twitter Stream
[](https://github.com/tesaguri/twitter-stream-rs/actions)
[](https://crates.io/crates/twitter-stream)
[](https://docs.rs/twitter-stream/)
A Rust library for listening on Twitter Streaming API.
## Usage
Add this to your `Cargo.toml`:
```toml
[dependencies]
futures = "0.3"
tokio = { version = "0.2", features = ["macros"] }
twitter-stream = "0.10"
```
Here is a basic example that prints public mentions to @Twitter in JSON format:
```rust
use futures::prelude::*;
use twitter_stream::{Token, TwitterStream};
#[tokio::main]
async fn main() {
let token = Token::new("consumer_key", "consumer_secret", "access_key", "access_secret");
TwitterStream::track("@Twitter", &token)
.try_flatten_stream()
.try_for_each(|json| {
println!("{}", json);
future::ok(())
})
.await
.unwrap();
}
```
## Alternatives
[`egg-mode`], a Twitter API client crate, implements a Streaming API client as well. The following table shows key differences between `twitter-stream` and `egg-mode`.
[`egg-mode`]: https://crates.io/crates/egg-mode
| Streaming message type | `string::String<bytes::Bytes>` (raw JSON string) | `StreamMessage` (deserialized message) |
| REST API integration | No | Yes |
| Customizable HTTP client | Yes | No |
If your application don't require explicit control over the raw JSON strings or underlying HTTP client, `egg-mode` may be a better choice.
## License
This project is licensed under the MIT license ([LICENSE](LICENSE) or https://opensource.org/licenses/MIT) unless explicitly stated otherwise.