use nym_sdk::mixnet;
use nym_sdk::mixnet::MixnetMessageSender;
use nym_sdk::Error;
#[tokio::main]
async fn main() {
nym_bin_common::logging::setup_tracing_logger();
let mut client = mixnet::MixnetClient::connect_new().await.unwrap();
let our_address = *client.nym_address();
println!("Our client nym address is: {our_address}");
println!("\nTesting message-based API (should work)");
client
.send_plain_message(our_address, "hello via message API")
.await
.unwrap();
println!("Message sent successfully via message-based API");
println!("\nActivating stream mode via listener()");
let _listener = client.listener().unwrap();
println!("Stream mode is now active");
println!("\nTesting message-based API again (should fail)");
let result = client
.send_plain_message(our_address, "this should fail")
.await;
match result {
Err(Error::StreamModeActive) => {
println!("Got expected error: StreamModeActive");
}
Err(e) => {
println!("Got unexpected error: {e:?}");
}
Ok(()) => {
println!("ERROR: send() should have failed but succeeded!");
}
}
println!("\nTesting split_sender (shares stream_mode flag)");
let sender = client.split_sender();
let result = sender
.send_plain_message(our_address, "this should also fail")
.await;
match result {
Err(Error::StreamModeActive) => {
println!("Got expected error: StreamModeActive on split sender");
}
Err(e) => {
println!("Got unexpected error: {e:?}");
}
Ok(()) => {
println!("ERROR: split_sender.send() should have failed but succeeded!");
}
}
client.disconnect().await;
}