Summary
This proposal proposes to change the way how async api does implemented. It makes async api more clearly for use and extend.
Motivation
Our current approach to implement trait primitives as depends on nb crate. It was actually on start of this project but after version 1.36 rust already have async traits and methodology for work with it. So in 2018 edition of rust lang we have language words as async, await. The marcosses exported by nb are conflicted with key words, we need to use r# prefix for each macros use.
This RFC attempts to change implementation to core types based implementation. It will be more effective and more conform rust language ideas.
Detailed design
This RFC inspired of PR #13, but after apply external crate I redesign for use core functionality because it will be better than external depends.
For example we have interface for serial:
use core::task::Poll;
/// A serial interface
pub trait Serial {
/// Error type associated to this serial interface
type Error;
/// Reads a single byte
fn read(&mut self) -> Poll<Result<u8, Self::Error>>;
/// Writes a single byte
fn write(&mut self, byte: u8) -> Poll<Result<(), Self::Error>>;
}
It use core::task::Poll as point of async run status. It was easy for implement and it isn't depends on nb or another external crates.
Alternatives
Don't implement this RFC.
Uresolved questions:
- More clear examples of right use
async code.
- How we need to update depend crates?
- Do we need to rewrite
nb prefer than rewrite async api of embedded-hal?
Summary
This proposal proposes to change the way how
async apidoes implemented. It makesasync apimore clearly for use and extend.Motivation
Our current approach to implement trait primitives as depends on
nbcrate. It was actually on start of this project but after version1.36rust already haveasync traitsand methodology for work with it. So in 2018 edition of rust lang we have language words asasync,await. The marcosses exported bynbare conflicted with key words, we need to user#prefix for each macros use.This RFC attempts to change implementation to
core typesbased implementation. It will be more effective and more conform rust language ideas.Detailed design
This RFC inspired of PR #13, but after apply external crate I redesign for use core functionality because it will be better than external depends.
For example we have interface for serial:
It use
core::task::Pollas point ofasyncrun status. It was easy for implement and it isn't depends onnbor another external crates.Alternatives
Don't implement this RFC.
Uresolved questions:
asynccode.nbprefer than rewriteasyncapi ofembedded-hal?