Crates.io | imap-next |
lib.rs | imap-next |
version | |
source | src |
created_at | 2024-06-07 14:07:20.617143 |
updated_at | 2024-12-04 20:31:45.842163 |
description | Thin sans I/O abstraction over IMAP's distinct protocol flows |
homepage | |
repository | https://github.com/duesee/imap-next |
max_upload_size | |
id | 1264860 |
Cargo.toml error: | TOML parse error at line 18, column 1 | 18 | autolib = false | ^^^^^^^ unknown field `autolib`, expected one of `name`, `version`, `edition`, `authors`, `description`, `readme`, `license`, `repository`, `homepage`, `documentation`, `build`, `resolver`, `links`, `default-run`, `default_dash_run`, `rust-version`, `rust_dash_version`, `rust_version`, `license-file`, `license_dash_file`, `license_file`, `licenseFile`, `license_capital_file`, `forced-target`, `forced_dash_target`, `autobins`, `autotests`, `autoexamples`, `autobenches`, `publish`, `metadata`, `keywords`, `categories`, `exclude`, `include` |
size | 0 |
%%{init: {'theme': 'neutral' } }%%
flowchart LR
imap-types --> imap-codec
imap-codec --> imap-next
imap-next -.-> imap-proxy
imap-next -.-> imap-client
style imap-codec stroke-dasharray: 10 5
style imap-next stroke-width:4px
click imap-types href "https://github.com/duesee/imap-codec/tree/main/imap-types"
click imap-codec href "https://github.com/duesee/imap-codec"
click imap-next href "https://github.com/duesee/imap-next"
click imap-proxy href "https://github.com/duesee/imap-proxy"
click imap-client href "https://github.com/soywod/imap-client"
imap-next
is a thin sans I/O abstraction over IMAP's distinct protocol flows.
These are literal handling, AUTHENTICATE, and IDLE.
The way these protocol flows were defined in IMAP couples networking, parsing, and business logic.
imap-next
untangles them, providing a minimal interface allowing sending and receiving coherent messages.
It's a thin layer paving the ground for higher-level client or server implementations.
And it's sans I/O enabling the integration in any existing I/O runtime.
imap-next
uses imap-codec
internally for parsing and serialization, and
re-exposes imap-types
.
imap-proxy
is an IMAP proxy that gracefully forwards unsolicited responses,
abstracts over literals, and Debug
-prints messages.imap-client
is a methods-based client library with
a client.capability()
, client.login()
, ... interface.use std::error::Error;
use imap_next::{
client::{Client, Event, Options},
imap_types::{
command::{Command, CommandBody},
core::Tag,
},
stream::Stream,
};
use tokio::net::TcpStream;
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
let mut stream = Stream::insecure(TcpStream::connect("127.0.0.1:1143").await?);
let mut client = Client::new(Options::default());
loop {
match stream.next(&mut client).await? {
event => {
println!("{event:?}");
if matches!(event, Event::GreetingReceived { .. }) {
break;
}
}
}
}
let handle = client.enqueue_command(Command::new("A1", CommandBody::login("Al¹cE", "pa²²w0rd")?)?);
loop {
match stream.next(&mut client).await? {
event => println!("{event:?}"),
}
}
}
This crate is dual-licensed under Apache 2.0 and MIT terms.
Thanks to the NLnet Foundation for supporting imap-next
through
their NGI Assure program!