Skip to main content

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::*;