use imap_next::{ client::{Client, Event, Options}, imap_types::{ command::{Command, CommandBody}, core::Tag, }, stream::Stream, }; use tokio::net::TcpStream; #[tokio::main(flavor = "current_thread")] async fn main() { let stream = TcpStream::connect("127.0.0.1:12345").await.unwrap(); let mut stream = Stream::insecure(stream); let mut client = Client::new(Options::default()); let greeting = loop { match stream.next(&mut client).await.unwrap() { Event::GreetingReceived { greeting } => break greeting, event => println!("unexpected event: {event:?}"), } }; println!("received greeting: {greeting:?}"); let handle = client.enqueue_command(Command { tag: Tag::try_from("A1").unwrap(), body: CommandBody::login("Al¹cE", "pa²²w0rd").unwrap(), }); loop { match stream.next(&mut client).await.unwrap() { Event::CommandSent { handle: got_handle, command, } => { println!("command sent: {got_handle:?}, {command:?}"); assert_eq!(handle, got_handle); } Event::CommandRejected { handle: got_handle, command, status, } => { println!("command rejected: {got_handle:?}, {command:?}, {status:?}"); assert_eq!(handle, got_handle); } Event::DataReceived { data } => { println!("data received: {data:?}"); } Event::StatusReceived { status } => { println!("status received: {status:?}"); } Event::ContinuationRequestReceived { continuation_request, } => { println!("unexpected continuation request received: {continuation_request:?}"); } event => { println!("{event:?}"); } } } }