in_stream/lib.rs
1//! Trait system for facilitating non-blocking stream chaining with handshaking
2//!
3//! # Example
4//!
5//! ```rust
6//! use url2::prelude::*;
7//! use in_stream::*;
8//!
9//! let (send_binding, recv_binding) = crossbeam_channel::unbounded();
10//!
11//! let server_thread = std::thread::spawn(move || {
12//! let config = TcpBindConfig::default();
13//! let config = TlsBindConfig::new(config).fake_certificate();
14//! let config = WssBindConfig::new(config);
15//! let mut listener:
16//! InStreamListenerWss<InStreamListenerTls<InStreamListenerTcp>> =
17//! InStreamListenerWss::bind(
18//! &url2!("ws://127.0.0.1:0"),
19//! config
20//! ).unwrap();
21//!
22//! println!("bound to: {}", listener.binding());
23//! send_binding.send(listener.binding()).unwrap();
24//!
25//! let mut srv = loop {
26//! match listener.accept() {
27//! Ok(srv) => break srv,
28//! Err(e) if e.would_block() => std::thread::yield_now(),
29//! Err(e) => panic!("{:?}", e),
30//! }
31//! };
32//!
33//! srv.write("hello from server".into()).unwrap();
34//! srv.flush().unwrap();
35//!
36//! std::thread::sleep(std::time::Duration::from_millis(100));
37//!
38//! let mut res = WsFrame::default();
39//! srv.read(&mut res).unwrap();
40//! assert_eq!("hello from client", res.as_str());
41//! });
42//!
43//! let client_thread = std::thread::spawn(move || {
44//! let binding = recv_binding.recv().unwrap();
45//! println!("connect to: {}", binding);
46//!
47//! let mut cli: InStreamWss<InStreamTls<InStreamTcp>> =
48//! InStreamWss::connect(
49//! &binding,
50//! WssConnectConfig::new(
51//! TlsConnectConfig::new(
52//! TcpConnectConfig::default()))).unwrap();
53//!
54//! cli.write("hello from client".into()).unwrap();
55//! cli.flush().unwrap();
56//!
57//! std::thread::sleep(std::time::Duration::from_millis(100));
58//!
59//! let mut res = WsFrame::default();
60//! cli.read(&mut res).unwrap();
61//! assert_eq!("hello from server", res.as_str());
62//! });
63//!
64//! server_thread.join().unwrap();
65//! client_thread.join().unwrap();
66//!
67//! ```
68
69#[macro_use]
70extern crate lazy_static;
71#[macro_use]
72extern crate shrinkwraprs;
73
74mod error;
75pub use error::*;
76
77mod std_stream_adapter;
78pub use std_stream_adapter::*;
79
80mod r#trait;
81pub use r#trait::*;
82
83mod mem;
84pub use mem::*;
85
86mod tcp;
87pub use tcp::*;
88
89mod tls;
90pub use tls::*;
91
92mod ws;
93pub use ws::*;
94
95pub mod json_rpc;
96pub use json_rpc::*;