#![cfg(feature = "ws")]
use typeway_core::session::*;
use typeway_server::typed_ws::{Either, TypedWebSocket};
fn _compile_test_send_has_send_method(_ws: TypedWebSocket<Send<String, End>>) {
let _ = _ws;
}
fn _compile_test_recv_has_recv_method(_ws: TypedWebSocket<Recv<String, End>>) {
let _ = _ws;
}
fn _compile_test_end_has_close_method(_ws: TypedWebSocket<End>) {
let _ = _ws;
}
fn _compile_test_offer_has_offer_method(
_ws: TypedWebSocket<Offer<Send<String, End>, Recv<u32, End>>>,
) {
let _ = _ws;
}
fn _compile_test_select_has_select_methods(
_ws: TypedWebSocket<Select<Send<String, End>, Recv<u32, End>>>,
) {
let _ = _ws;
}
fn _compile_test_rec_has_enter(_ws: TypedWebSocket<Rec<Send<String, Var>>>) {
let _entered: TypedWebSocket<Send<String, Var>> = _ws.enter();
}
async fn _compile_test_full_protocol(ws: TypedWebSocket<Send<String, Recv<String, End>>>) {
let ws = ws.send("hello".to_string()).await.unwrap();
let (_msg, ws) = ws.recv().await.unwrap();
ws.close().await.unwrap();
}
async fn _compile_test_recursive_protocol(
ws: TypedWebSocket<Rec<Recv<String, Send<String, Var>>>>,
) {
let ws = ws.enter();
let (msg, ws) = ws.recv().await.unwrap();
let ws = ws.send(msg).await.unwrap();
let _ws: TypedWebSocket<Rec<Recv<String, Send<String, Var>>>> =
ws.recurse::<Recv<String, Send<String, Var>>>();
}
async fn _compile_test_offer_branching(
ws: TypedWebSocket<Offer<Send<String, End>, Recv<u32, End>>>,
) {
match ws.offer().await.unwrap() {
Either::Left(ws) => {
let ws = ws.send("left branch".to_string()).await.unwrap();
ws.close().await.unwrap();
}
Either::Right(ws) => {
let (_val, ws) = ws.recv().await.unwrap();
ws.close().await.unwrap();
}
}
}
async fn _compile_test_select(ws: TypedWebSocket<Select<Send<String, End>, Recv<u32, End>>>) {
let ws = ws.select_left().await.unwrap();
let ws = ws.send("chose left".to_string()).await.unwrap();
ws.close().await.unwrap();
}
fn _compile_test_upgrade_typed(upgrade: typeway_server::ws::WebSocketUpgrade) {
type Proto = Send<String, Recv<String, End>>;
let _response = upgrade.on_upgrade_typed::<Proto, _, _>(|ws| async move {
let ws = ws.send("hello".to_string()).await.unwrap();
let (_reply, ws) = ws.recv().await.unwrap();
ws.close().await.unwrap();
});
}
#[test]
fn session_typed_ws_compiles() {
}