[−][src]Crate in_stream
Trait system for facilitating non-blocking stream chaining with handshaking
Example
use url2::prelude::*; use in_stream::*; let (send_binding, recv_binding) = crossbeam_channel::unbounded(); let server_thread = std::thread::spawn(move || { let config = TcpBindConfig::default(); let config = TlsBindConfig::new(config).fake_certificate(); let config = WssBindConfig::new(config); let mut listener: InStreamListenerWss<InStreamListenerTls<InStreamListenerTcp>> = InStreamListenerWss::bind( &url2!("ws://127.0.0.1:0"), config ).unwrap(); println!("bound to: {}", listener.binding()); send_binding.send(listener.binding()).unwrap(); let mut srv = loop { match listener.accept() { Ok(srv) => break srv, Err(e) if e.would_block() => std::thread::yield_now(), Err(e) => panic!("{:?}", e), } }; srv.write("hello from server".into()).unwrap(); srv.flush().unwrap(); std::thread::sleep(std::time::Duration::from_millis(100)); let mut res = WsFrame::default(); srv.read(&mut res).unwrap(); assert_eq!("hello from client", res.as_str()); }); let client_thread = std::thread::spawn(move || { let binding = recv_binding.recv().unwrap(); println!("connect to: {}", binding); let mut cli: InStreamWss<InStreamTls<InStreamTcp>> = InStreamWss::connect( &binding, WssConnectConfig::new( TlsConnectConfig::new( TcpConnectConfig::default()))).unwrap(); cli.write("hello from client".into()).unwrap(); cli.flush().unwrap(); std::thread::sleep(std::time::Duration::from_millis(100)); let mut res = WsFrame::default(); cli.read(&mut res).unwrap(); assert_eq!("hello from server", res.as_str()); }); server_thread.join().unwrap(); client_thread.join().unwrap();
Re-exports
pub use json_rpc::*; |
Modules
in_stream_mem | |
json_rpc |
Structs
CloseData | a close message, with a websocket close code https://www.iana.org/assignments/websocket/websocket.xml#close-code-number |
InStreamListenerMem | bind to a virtual in-process ipc "interface" |
InStreamListenerTcp | basic tcp socket server/listener |
InStreamListenerTls | bind to a network interface to listen for TLS connections |
InStreamListenerWss | bind to a network interface to listen for websocket connections |
InStreamMem | a singleton memory transport could be used for unit testing or for in-process ipc |
InStreamTcp | basic tcp socket stream |
InStreamTls | basic tls wrapper stream |
InStreamWss | websocket stream |
MemBindConfig | memory connection specific bind config |
MemConnectConfig | memory stream specific connect config |
StdStreamAdapter | provides std::io::{Read, Write} adapter for anything implementing InStreamStd |
TcpBindConfig | configuration options for the listener bind call |
TcpConnectConfig | configuration options for tcp connect |
TlsBindConfig | tls specific bind config |
TlsCertificate | represents an encrypted TLS certificate, and the passphrase to decrypt it obviously, when serializing, you should only encode the data, not the passphrase |
TlsConnectConfig | tls specific connection config |
WssBindConfig | websocket specific bind configuration |
WssConnectConfig | websocket specific connect config |
Enums
WsFrame | enumerates the different websocket message types |
Traits
InStream | implement this trait to provide a stream endpoint / socket type connection works like combined std::io::{Read, Write}, but with generic types the underlying stream should be treated as non-blocking. For example, if this is a TLS stream, we may still need to complete a handshaking process before data can actually be written. |
InStreamConfig | mixin helper for converting structs into an Any and back again |
InStreamListener | implement this trait to provide listening/server socket type functionality |
InStreamListenerStd | implement this if your listener accepts std::io::{Read, Write} streams |
InStreamStd | implement this if your stream deals with binary u8 data |
IoErrorExt | provide some convenience functions for working with non-blocking IO |
Type Definitions
InStreamConfigAny | dynamic type for passing around in_stream configuration this is a stopgap until rust allows better constraints on associated types |