1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
// Pasts
//
// Copyright (c) 2019-2020 Jeron Aldaron Lau
//
// Licensed under the Apache License, Version 2.0, <LICENSE-APACHE or
// https://apache.org/licenses/LICENSE-2.0>, or the Zlib License, <LICENSE-ZLIB
// or http://opensource.org/licenses/Zlib>, at your option. This file may not be
// copied, modified, or distributed except according to those terms.
//
//! Minimal and simpler alternative to the futures crate.
//!
//! # Optional Features
//! The **std** feature is enabled by default, disable it to use on `no_std`.
//!
//! # Getting Started
//! Add the following to your *Cargo.toml*:
//!
//! ```toml
//! [dependencies]
//! pasts = "0.6"
//! aysnc-std = "1.0"
//! ```
//!
//! ```rust,no_run
//! #![forbid(unsafe_code)]
//!
//! use pasts::prelude::*;
//! use async_std::task;
//!
//! use std::{cell::RefCell, time::Duration};
//!
//! async fn one(state: &RefCell<usize>) {
//!     println!("Starting task one");
//!     while *state.borrow() < 5 {
//!         task::sleep(Duration::new(1, 0)).await;
//!         let mut state = state.borrow_mut();
//!         println!("One {}", *state);
//!         *state += 1;
//!     }
//!     println!("Finish task one");
//! }
//!
//! async fn two(state: &RefCell<usize>) {
//!     println!("Starting task two");
//!     loop {
//!         task::sleep(Duration::new(2, 0)).await;
//!         let mut state = state.borrow_mut();
//!         println!("Two {}", *state);
//!         *state += 1;
//!     }
//! }
//!
//! async fn example() {
//!     let state = RefCell::new(0);
//!     task!(let task_one = one(&state));
//!     task!(let task_two = two(&state));
//!     poll![task_one, task_two].await;
//! }
//!
//! fn main() {
//!     exec!(example());
//! }
//! ```
#![cfg_attr(not(feature = "std"), no_std)]
#![doc(
    html_logo_url = "https://libcala.github.io/logo.svg",
    html_favicon_url = "https://libcala.github.io/icon.svg",
    html_root_url = "https://docs.rs/pasts"
)]
#![deny(unsafe_code)]
#![warn(
    anonymous_parameters,
    missing_copy_implementations,
    missing_debug_implementations,
    missing_docs,
    nonstandard_style,
    rust_2018_idioms,
    single_use_lifetimes,
    trivial_casts,
    trivial_numeric_casts,
    unreachable_pub,
    unused_extern_crates,
    unused_qualifications,
    variant_size_differences
)]

#[cfg(any(not(feature = "std"), target_arch = "wasm32"))]
extern crate alloc;

/// Re-exported macros.
pub mod prelude {
    pub use crate::{exec, poll, task, join};
}

mod exec;
mod poll;
mod util;

pub use exec::_block_on;
pub use util::Task;