pushevent 0.1.3

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.
Documentation
  • Coverage
  • 78.57%
    11 out of 14 items documented6 out of 11 items with examples
  • Size
  • Source code size: 34.7 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 3.43 MB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 50s Average build duration of successful builds.
  • all releases: 50s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • vgarleanu/pushevent
    0 0 0
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • vgarleanu

PushEvent

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.

Documentation

PushEvent is simple and straightforward to use:

Examples

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.

Testing

To test this library simply run cargo test.

Contributing

Contributions are absolutely, positively welcome and encouraged! Contributions come in many forms. You could:

  1. Submit a feature request or bug report as an issue.
  2. Ask for improved documentation as an issue.
  3. Contribute code via merge requests.

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.

License

PushEvent is licensed under the MIT License (LICENSE.md or http://opensource.org/licenses/MIT)