Skip to content

Orkking2/rust-promises

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

46 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Promisery

Crates.io Docs.rs License

A JavaScript-inspired, ergonomic, and composable Promise type for Rust, supporting background work, chaining, and error handling with Result.


Features

  • ECMAScript 5-style promises with Rust's type safety
  • Chaining with .then, .map, and .map_err
  • Combinators: Promise::all, Promise::race
  • Panic-safe: panics in promise tasks are detected and reported
  • Fully documented with tested examples
  • Timeout and deadline support: Wait with [wait_timeout] or [wait_deadline]
  • Safe and unsafe waiting: Choose between [wait] (safe, double Result) and [wait_nopanic] (unsafe, panics on background panic)

Installation

Add to your Cargo.toml:

promisery = "2.0"

Example

use promisery::Promise;

let p = Promise::<_, ()>::new(|| Ok(2))
    .then(|res| res.map(|v| v * 10))
    .then(|res| res.map(|v| v + 5));
assert_eq!(p.wait(), Ok(Ok(25)));

API Highlights

  • Chaining:
    • .then for full control over result and error
    • .map for value transformation
    • .map_err for error transformation
  • Combinators:
    • Promise::all waits for all promises (returns Result<Result<Vec<T>, E>, PromisePanic>)
    • Promise::race resolves/rejects with the first to finish (returns Result<Result<T, E>, PromisePanic>)
  • Waiting:
    • .wait() — safe, never panics, returns a double Result
    • .wait_nopanic() — unsafe, panics if the background task panicked
    • .wait_timeout(duration) — wait with a timeout
    • .wait_deadline(instant) — wait until a deadline
  • Panic Handling:
    • Panics in promise tasks are detected and reported via PromisePanic

Why Promisery?

  • Lightweight, no async runtime required
  • Familiar API for those coming from JavaScript
  • Integrates with Rust's Result-based error handling
  • Does not spawn a new thread for each action that produces a new promise (see the documentation for each method for more details)

License

MIT OR Apache-2.0


See docs.rs/promisery for full documentation, API details, and more examples, including usage of wait_nopanic, wait_timeout, and wait_deadline.

About

Inefficient Javascript promises in Rust

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Rust 100.0%