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;