@@ -4,8 +4,8 @@ use rsocket_rust::error::RSocketError;
44use rsocket_rust:: frame:: Frame ;
55use rsocket_rust:: runtime:: { DefaultSpawner , Spawner } ;
66use rsocket_rust:: transport:: { ClientTransport , Rx , Tx , TxOnce } ;
7- use std:: net:: SocketAddr ;
8- use std:: net :: TcpStream as StdTcpStream ;
7+ use std:: net:: { AddrParseError , SocketAddr , TcpStream as StdTcpStream } ;
8+ use std:: str :: FromStr ;
99use tokio:: net:: TcpStream ;
1010use tokio_util:: codec:: Framed ;
1111
@@ -75,6 +75,19 @@ impl ClientTransport for TcpClientTransport {
7575 }
7676}
7777
78+ impl FromStr for TcpClientTransport {
79+ type Err = AddrParseError ;
80+
81+ fn from_str ( addr : & str ) -> Result < Self , Self :: Err > {
82+ let socket_addr = if addr. starts_with ( "tcp://" ) || addr. starts_with ( "TCP://" ) {
83+ addr. chars ( ) . skip ( 6 ) . collect :: < String > ( ) . parse ( ) ?
84+ } else {
85+ addr. parse ( ) ?
86+ } ;
87+ Ok ( TcpClientTransport :: new ( Connector :: Lazy ( socket_addr) ) )
88+ }
89+ }
90+
7891impl From < SocketAddr > for TcpClientTransport {
7992 fn from ( addr : SocketAddr ) -> TcpClientTransport {
8093 TcpClientTransport :: new ( Connector :: Lazy ( addr) )
@@ -83,12 +96,12 @@ impl From<SocketAddr> for TcpClientTransport {
8396
8497impl From < & str > for TcpClientTransport {
8598 fn from ( addr : & str ) -> TcpClientTransport {
86- let socket_addr: SocketAddr = if addr. starts_with ( "tcp://" ) {
87- let ss: String = addr. chars ( ) . skip ( 6 ) . collect ( ) ;
88- ss. parse ( ) . unwrap ( )
99+ let socket_addr: SocketAddr = if addr. starts_with ( "tcp://" ) || addr. starts_with ( "TCP://" ) {
100+ addr. chars ( ) . skip ( 6 ) . collect :: < String > ( ) . parse ( )
89101 } else {
90- addr. parse ( ) . unwrap ( )
91- } ;
102+ addr. parse ( )
103+ }
104+ . expect ( "Invalid transport string!" ) ;
92105 TcpClientTransport :: new ( Connector :: Lazy ( socket_addr) )
93106 }
94107}
0 commit comments