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;
extern crate lazy_static;
extern crate futures;
extern crate log;
extern crate log4rs;
extern crate sanename;
extern crate sha2;