Expand description
Crate function-compose
provides utilities for composing functions and way to inject arguments to functions
§Usage
use function_compose::composeable;
#[composeable()]
pub fn add_10(a: i32) -> Result<i32, String> {
Ok(a + 10)
}
§The async function should return BoxFuture.
use function_compose::composeable;
use futures::{future::BoxFuture, FutureExt};
#[composeable()]
pub fn add_async(a: i32, b: i32) -> BoxFuture<'static, Result<i32, String>> {
async move {
let r = a + b;
Ok(r)
}.boxed()
}
§Composing async and sync functions usage
ⓘ
use function_compose::compose;
use fn_macros::composeable;
use futures::{future::BoxFuture, FutureExt};
#[composeable()]
pub fn add_async(a: i32, b: i32) -> BoxFuture<'static, Result<i32, String>> {
async move {
let r = a + b;
Ok(r)
}.boxed()
}
#[composeable()]
pub fn add_10(a: i32) -> Result<i32, String> {
Ok(a + 10)
}
async fn test(){
let result = compose!(add_async.provide(10) -> add_100 -> with_args(10)).await;
assert_eq!(210, result.unwrap());
}
§Function argument injection usage
use function_compose::composeable;
use futures::{future::BoxFuture, FutureExt};
#[composeable()]
pub fn add_3_arg_async(a: i32,b: i32, c:i32) -> BoxFuture<'static, Result<i32, String>>{
async move{
let r = a + b + c;
Ok(r)
}.boxed()
}
§Example of multiple injection to async function
ⓘ
use crate::compose;
let result = compose!(add_3_arg_async.provide(100).provide(200) -> add_10 -> with_args(10)).await;
assert_eq!(220, result.unwrap());
Modules§
Macros§
- compose
- concat_
idents - This macros makes it possible to concatenate identifiers at compile time and use them as normal.
It’s an extension/replacement of
std::concat_idents
, since in comprassion to the std-solution, the idents here can be used everywhere. - paste
Traits§
- Injector
- Then
- trait Then allows you to compose functions. Type param A represents the function arg of Self
Functions§
- lift_
async_ fn1 - Function to box FnOnce sync function with 1 aguments and coerce it to BoxedAsyncFn1
- lift_
async_ fn2 - Function to box FnOnce sync function with 2 aguments and coerce it to BoxedAsyncFn2
- lift_
async_ fn3 - Function to box FnOnce sync function with 3 aguments and coerce it to BoxedAsyncFn3
- lift_
async_ fn4 - Function to box FnOnce sync function with 4 aguments and coerce it to BoxedAsyncFn4
- lift_
async_ fn5 - Function to box FnOnce sync function with 5 aguments and coerce it to BoxedAsyncFn5
- lift_
async_ fn6 - Function to box FnOnce sync function with 6 aguments and coerce it to BoxedAsyncFn6
- lift_
async_ fn7 - Function to box FnOnce sync function with 7 aguments and coerce it to BoxedAsyncFn7
- lift_
async_ fn8 - Function to box FnOnce sync function with 8 aguments and coerce it to BoxedAsyncFn8
- lift_
sync_ fn1 - Function to box FnOnce sync function with 1 aguments and coerce it to BoxedFn1
- lift_
sync_ fn2 - Function to box FnOnce sync function with 2 aguments and coerce it to BoxedFn2
- lift_
sync_ fn3 - Function to box FnOnce sync function with 3 aguments and coerce it to BoxedFn3
- lift_
sync_ fn4 - Function to box FnOnce sync function with 4 aguments and coerce it to BoxedFn4
- lift_
sync_ fn5 - Function to box FnOnce sync function with 5 aguments and coerce it to BoxedFn5
- lift_
sync_ fn6 - Function to box FnOnce sync function with 6 aguments and coerce it to BoxedFn6
- lift_
sync_ fn7 - Function to box FnOnce sync function with 7 aguments and coerce it to BoxedFn7
- lift_
sync_ fn8 - Function to box FnOnce sync function with 8 aguments and coerce it to BoxedFn8
- provider_
async_ f2 - dependency injection function provider_async_f2 for injecting the last argument of a given async function
- provider_
async_ f3 - dependency injection function provider_async_f3 for injecting the last argument of a given async function
- provider_
async_ f4 - dependency injection function provider_async_f4 for injecting the last argument of a given async function
- provider_
async_ f5 - dependency injection function provider_async_f5 for injecting the last argument of a given async function
- provider_
async_ f6 - dependency injection function provider_async_f6 for injecting the last argument of a given async function
- provider_
async_ f7 - dependency injection function provider_async_f7 for injecting the last argument of a given async function
- provider_
async_ f8 - dependency injection function provider_async_f8 for injecting the last argument of a given async function
- provider_
f2 - dependency injection function provide_f2 for injecting the last argument of a given sync function
- provider_
f3 - dependency injection function provide_f3 for injecting the last argument of a given sync function
- provider_
f4 - dependency injection function provide_f4 for injecting the last argument of a given sync function
- provider_
f5 - dependency injection function provide_f5 for injecting the last argument of a given sync function
- provider_
f6 - dependency injection function provide_f6 for injecting the last argument of a given sync function
- provider_
f7 - dependency injection function provide_f7 for injecting the last argument of a given sync function
- provider_
f8 - dependency injection function provide_f8 for injecting the last argument of a given sync function
Type Aliases§
- Boxed
Async Fn1 - Type alias BoxedAsyncFn1 for Boxed FnOnce async function1 arguments
- Boxed
Async Fn2 - Type alias BoxedAsyncFn2 for Boxed FnOnce async function2 arguments
- Boxed
Async Fn3 - Type alias BoxedAsyncFn3 for Boxed FnOnce async function3 arguments
- Boxed
Async Fn4 - Type alias BoxedAsyncFn4 for Boxed FnOnce async function4 arguments
- Boxed
Async Fn5 - Type alias BoxedAsyncFn5 for Boxed FnOnce async function5 arguments
- Boxed
Async Fn6 - Type alias BoxedAsyncFn6 for Boxed FnOnce async function6 arguments
- Boxed
Async Fn7 - Type alias BoxedAsyncFn7 for Boxed FnOnce async function7 arguments
- Boxed
Async Fn8 - Type alias BoxedAsyncFn8 for Boxed FnOnce async function8 arguments
- Boxed
Fn1 - Type alias BoxedFn1 for Boxed FnOnce sync function with 1 arguments
- Boxed
Fn2 - Type alias BoxedFn2 for Boxed FnOnce sync function with 2 arguments
- Boxed
Fn3 - Type alias BoxedFn3 for Boxed FnOnce sync function with 3 arguments
- Boxed
Fn4 - Type alias BoxedFn4 for Boxed FnOnce sync function with 4 arguments
- Boxed
Fn5 - Type alias BoxedFn5 for Boxed FnOnce sync function with 5 arguments
- Boxed
Fn6 - Type alias BoxedFn6 for Boxed FnOnce sync function with 6 arguments
- Boxed
Fn7 - Type alias BoxedFn7 for Boxed FnOnce sync function with 7 arguments
- Boxed
Fn8 - Type alias BoxedFn8 for Boxed FnOnce sync function with 8 arguments