1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
//! # Romp //! //! `romp` is a messaging server that uses the STOMP protocol, and STOMP over WebSockets. //! //! `romp` can run as a standalone server, hosting queues and/or topics to which clients can subscribe or //! send messages. It can also host bespoke filters (handlers) to programmatically respond to incoming messages. //! This enables romp servers to act as app servers, using asynchronous messaging model. //! //! //! Custom filters can be added as follow... //! //! ``` //! //! // Filter structs have an init() method //! use romp::bootstrap::romp_bootstrap; //! use romp::workflow::filter::ping::PingFilter; //! use romp::prelude::{romp_stomp_filter, romp_http_filter, romp_stomp, romp_http}; //! use romp::workflow::filter::http::hello::HelloFilter; //! use romp::message::response::{get_response_ok, get_http_ok_msg}; //! use std::sync::Arc; //! //! romp_stomp_filter(Box::new(PingFilter {})); //! //! // Http Filter structs different error handling //! romp_http_filter(Box::new(HelloFilter {})); //! //! // STOMP filters can be written as closures //! romp_stomp(|ctx, msg| { //! if let Some(hdr) = msg.get_header("special-header") { //! let mut session = ctx.session.write().unwrap(); //! session.send_message(get_response_ok("howdy".to_string())); //! return Ok(true); //! } //! Ok(false) //! }); //! //! // as can HTTP filters //! romp_http(|ctx, msg| { //! if "/pingerooni".eq(ctx.attributes.get("romp.uri").unwrap()) { //! let mut session = ctx.session.write().unwrap(); //! session.send_message(Arc::new(get_http_ok_msg())); //! return Ok(true); //! } //! Ok(false) //! }); //! //! // Then bootstrap the server, this is commented out in the docs, because of some bug in the cargo test when this comment is uncommented. //! // There is no bug in the code below its used like that in main.rs that compiles. //! // tokio::run(bootstrap_romp()); //! //! ``` extern crate base64; #[macro_use] extern crate lazy_static; extern crate futures; extern crate log; extern crate log4rs; extern crate sanename; extern crate sha2; pub mod body_parser; pub mod bootstrap; pub mod errors; pub mod downstream; pub mod config; pub mod init; pub mod message; pub mod parser; pub mod persist; pub mod prelude; pub mod session; pub mod system; pub mod web_socket; pub mod workflow; pub mod util;