Crates.io | pushevent |
lib.rs | pushevent |
version | 0.1.3 |
source | src |
created_at | 2019-11-08 22:46:07.727333 |
updated_at | 2019-11-09 21:15:01.944363 |
description | PushEvent is a simple event dispatch library built on top of ws-rs, that allows you to dispatch events to clients based on what resource they are subscribed to. |
homepage | |
repository | https://gitlab.com/vgarleanu/pushevent |
max_upload_size | |
id | 179500 |
size | 16,805 |
PushEvent is a simple event dispatch library built on top of ws-rs, that allows you to dispatch events to clients based on what resource they are subscribed to.
/// Basic event struct which serializes with serde to json.
#[derive(Serialize, Debug)]
struct SimplePushEvent {
message: String,
}
impl SerializableEvent for SimplePushEvent {
/// Serialize method used as a intermediary to serialize the struct into a json string and
/// return it.
fn serialize(&self) -> String {
serde_json::to_string(&self).unwrap()
}
}
fn main() {
// Server is started on localhost with port 3012
let server = Server::new("127.0.0.1:3012");
let tx = server.get_tx();
loop {
// We create a new boxed instance of our SimplePushEvent struct with whatever message
// inside.
let msg = Box::new(SimplePushEvent {
message: String::from("Hello world"),
});
// The previous message event is encapsulated in our Event struct to which we supply two
// arguments, the path/resource subscribers we would like to target ("/hello_world") and
// our message event struct instance which implements SerializableEvent.
let event = Event::new("/hello_world", msg);
// The event is then sent over the tx channel provided by our server instance
match tx.send(event) {
Ok(_) => {}
Err(x) => println!("Err {:?}", x),
};
let millis = time::Duration::from_millis(100);
thread::sleep(millis);
}
}
Accessing 127.0.0.1:3012/hello_world
, for example, will subscribe you to that route, yielding you with a
message every 100ms which should be {'message': 'Hello world'}
. This can be further used to build and publish more complex events.
PushEvent is simple and straightforward to use:
Rocket ships with an extensive number of examples in the examples/
directory
which can be compiled and run with Cargo. For instance, the following sequence
of commands builds and runs the Hello, world!
example:
cd examples/simple
cargo run
You should see {'message': 'Hello world'}
by accessing ws://127.0.0.1:3012
.
To test this library simply run cargo test
.
Contributions are absolutely, positively welcome and encouraged! Contributions come in many forms. You could:
All pull requests are code reviewed and tested by the CI. Note that unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in PushEvent by you shall be licensed under the MIT License without any additional terms or conditions.
PushEvent is licensed under the MIT License (LICENSE.md or http://opensource.org/licenses/MIT)