项目作者: WilliamVenner

项目描述 :
Tiny macro for calling functions with generic Option arguments
高级语言: Rust
项目地址: git://github.com/WilliamVenner/turbonone.git
创建时间: 2021-03-31T22:18:19Z
项目社区:https://github.com/WilliamVenner/turbonone

开源协议:Other

下载


crates.io
docs.rs
license

turbonone (no_std)

Tiny macro for calling functions with generic Option<T> arguments.

Usage

Add to your Cargo.toml file:

  1. [dependencies]
  2. turbonone = "0.*"

The Problem

  1. fn my_function<T>(arg: Option<T>) -> &'static str {
  2. "Works!"
  3. }
  4. fn my_box_function<T>(arg: Option<Box<T>>) -> &'static str {
  5. "Works!"
  6. }
  7. fn my_complex_function<T>(arg: Option<Arc<Box<T>>>) -> &'static str {
  8. "Works!"
  9. }
  10. my_function(None); // cannot infer type for type parameter `T` declared on the associated function `my_function`
  11. my_function(Some("An argument")); // Works!
  12. my_box_function(None); // cannot infer type for type parameter `T` declared on the associated function `my_box_function`
  13. my_box_function(Some(Box::new("An argument"))); // Works!
  14. my_complex_function(None); // cannot infer type for type parameter `T` declared on the associated function `my_complex_function`
  15. my_complex_function(Some(Arc::new(Box::new("An argument")))); // Works!

The Solution

  1. #[macro_use] extern crate turbonone;
  2. fn my_function<T>(arg: Option<T>) -> &'static str {
  3. "Works!"
  4. }
  5. fn my_box_function<T>(arg: Option<Box<T>>) -> &'static str {
  6. "Works!"
  7. }
  8. fn my_complex_function<T>(arg: Option<Arc<Box<T>>>) -> &'static str {
  9. "Works!"
  10. }
  11. my_function(turbonone!()); // Works!
  12. my_function(Some("An argument")); // Works!
  13. my_box_function(turbonone!(Box)); // Works!
  14. my_box_function(turbonone!(Box<()>)); // Works!
  15. my_box_function(Some(Box::new("An argument"))); // Works!
  16. my_complex_function(turbonone!(Arc<Box<()>>)); // Works!
  17. my_complex_function(Some(Arc::new(Box::new("An argument")))); // Works!