#[anyinput]
Expand description
Easily create functions that accept any type of string-, path-, iterator-, or array-like inputs.
The AnyInputs are AnyString
, AnyPath
, AnyIter
, AnyArray
, and (optionally) AnyNdArray
.
See the documentation for for details.
Example
use anyinput::anyinput;
use anyhow::Result;
#[anyinput]
fn len_plus_2(s: AnyString) -> Result<usize, anyhow::Error> {
Ok(s.len()+2)
}
// By using AnyString, len_plus_2 works with
// &str, String, or &String -- borrowed or moved.
assert_eq!(len_plus_2("Hello")?, 7); // move a &str
let input: &str = "Hello";
assert_eq!(len_plus_2(&input)?, 7); // borrow a &str
let input: String = "Hello".to_string();
assert_eq!(len_plus_2(&input)?, 7); // borrow a String
let input2: &String = &input;
assert_eq!(len_plus_2(&input2)?, 7); // borrow a &String
assert_eq!(len_plus_2(input2)?, 7); // move a &String
assert_eq!(len_plus_2(input)?, 7); // move a String