///|
/// Transport types
///|
/// Custom transport hooks (sync)
pub struct CustomTransport {
connect : () -> Result[Unit, TransportError]
send : (String) -> Result[Unit, TransportError]
recv : () -> Result[String, TransportError]
close : () -> Result[Unit, TransportError]
}
///|
/// Create custom transport
pub fn CustomTransport::new(
connect : () -> Result[Unit, TransportError],
send : (String) -> Result[Unit, TransportError],
recv : () -> Result[String, TransportError],
close : () -> Result[Unit, TransportError],
) -> CustomTransport {
{ connect, send, recv, close }
}
///|
/// Transport (JS WebSocket / Custom / Unsupported)
///|
/// Chrome BiDi pipe transport state
pub struct ChromePipeState {
headless : Bool
proc_id : Ref[Int?]
closed : Ref[Bool]
}
///|
fn ChromePipeState::new(headless : Bool) -> ChromePipeState {
{ headless, proc_id: { val: None }, closed: { val: false } }
}
pub enum Transport {
JsWebSocket(JsWebSocketState)
ChromePipe(ChromePipeState)
Custom(CustomTransport)
Unsupported(TransportError)
}
///|
/// Create custom transport wrapper
pub fn Transport::custom(custom : CustomTransport) -> Transport {
Custom(custom)
}
///|
/// Create unsupported transport
pub fn Transport::unsupported(message : String) -> Transport {
Unsupported(NotSupported(message~))
}