4 releases (2 breaking)
0.3.1 | Jan 5, 2025 |
---|---|
0.3.0 | Dec 28, 2024 |
0.2.0 | Nov 17, 2024 |
0.1.0 | Oct 23, 2024 |
#1992 in Network programming
224 downloads per month
135KB
2K
SLoC
yosemite
yosemite
is a SAMv3 client library for interacting with the I2P network.
It provides both synchronous and asynchronous APIs which are configurable via sync
and async
feature flags, respectively.
Supported features
- Streams
- Forwarding
Read
/Write
for synchronous streamsAsyncRead
/AsyncWrite
for asynchronous streams
- Datagrams
- Repliable
- Anonymous
Usage
async
is enabled by default, giving access to asynchronous APIs:
yosemite = "0.3.1"
sync
enables synchronous APIs:
yosemite = { version = "0.3.1", default-features = false, features = ["sync"] }
sync
and async
are mutually exclusive, only one or the other can be enabled. The APIs are otherwise the same but async
requires blocking calls to .await
.
Example usage of the API:
use futures::AsyncReadExt;
use yosemite::{style::Stream, Session};
#[tokio::main]
async fn main() -> yosemite::Result<()> {
let mut session = Session::<Stream>::new(Default::default()).await?;
while let Ok(mut stream) = session.accept().await {
println!("{} connected", stream.remote_destination());
tokio::spawn(async move {
let mut buffer = vec![0u8; 512];
while let Ok(nread) = stream.read(&mut buffer).await {
println!(
"client sent: {:?}",
std::str::from_utf8(&buffer[..nread])
);
}
});
}
Ok(())
}
See examples
for instructions on how to use yosemite
.
Copying
MIT
Dependencies
~2–11MB
~110K SLoC