Trait yarnspinner::core::YarnFn

source ·
pub trait YarnFn<Marker>: Clone + Send + Sync {
    type Out: IntoYarnValueFromNonYarnValue + 'static;

    // Required method
    fn parameter_types(&self) -> Vec<TypeId>;

    // Provided method
    fn return_type(&self) -> TypeId { ... }
}
Expand description

A function that can be registered into and called from Yarn. It must have the following properties:

§Examples

fn give_summary(name: &str, age: usize, is_cool: bool) -> String {
   format!("{name} is {age} years old and is {} cool", if is_cool { "very" } else { "not" })
}

Which may be called from Yarn as follows:

<<set $name to "Bob">>
<<set $age to 42>>
<<set $is_cool to true>>
Narrator: {give_summary($name, $age, $is_cool)}

Required Associated Types§

source

type Out: IntoYarnValueFromNonYarnValue + 'static

The type of the value returned by this function. See YarnFn for more information about what is allowed.

Required Methods§

source

fn parameter_types(&self) -> Vec<TypeId>

The TypeIds of the parameters of this function.

Provided Methods§

source

fn return_type(&self) -> TypeId

The TypeId of the return type of this function.

Object Safety§

This trait is not object safe.

Implementors§

source§

impl<F, O> YarnFn<fn() -> O> for F
where F: for<'a> Send + for<'a> Sync + for<'a> Clone + for<'a> Fn() -> O + for<'a> Fn(), O: IntoYarnValueFromNonYarnValue + 'static,

§

type Out = O

source§

impl<F, O, P0> YarnFn<fn(_: P0) -> O> for F
where F: for<'a> Send + for<'a> Sync + for<'a> Clone + for<'a> Fn(P0) -> O + for<'a> Fn(<P0 as YarnFnParam>::Item<'a>), O: IntoYarnValueFromNonYarnValue + 'static, P0: YarnFnParam + 'static,

§

type Out = O

source§

impl<F, O, P0, P1> YarnFn<fn(_: P0, _: P1) -> O> for F
where F: for<'a> Send + for<'a> Sync + for<'a> Clone + for<'a> Fn(P0, P1) -> O + for<'a> Fn(<P0 as YarnFnParam>::Item<'a>, <P1 as YarnFnParam>::Item<'a>), O: IntoYarnValueFromNonYarnValue + 'static, P0: YarnFnParam + 'static, P1: YarnFnParam + 'static,

§

type Out = O

source§

impl<F, O, P0, P1, P2> YarnFn<fn(_: P0, _: P1, _: P2) -> O> for F
where F: for<'a> Send + for<'a> Sync + for<'a> Clone + for<'a> Fn(P0, P1, P2) -> O + for<'a> Fn(<P0 as YarnFnParam>::Item<'a>, <P1 as YarnFnParam>::Item<'a>, <P2 as YarnFnParam>::Item<'a>), O: IntoYarnValueFromNonYarnValue + 'static, P0: YarnFnParam + 'static, P1: YarnFnParam + 'static, P2: YarnFnParam + 'static,

§

type Out = O

source§

impl<F, O, P0, P1, P2, P3> YarnFn<fn(_: P0, _: P1, _: P2, _: P3) -> O> for F
where F: for<'a> Send + for<'a> Sync + for<'a> Clone + for<'a> Fn(P0, P1, P2, P3) -> O + for<'a> Fn(<P0 as YarnFnParam>::Item<'a>, <P1 as YarnFnParam>::Item<'a>, <P2 as YarnFnParam>::Item<'a>, <P3 as YarnFnParam>::Item<'a>), O: IntoYarnValueFromNonYarnValue + 'static, P0: YarnFnParam + 'static, P1: YarnFnParam + 'static, P2: YarnFnParam + 'static, P3: YarnFnParam + 'static,

§

type Out = O

source§

impl<F, O, P0, P1, P2, P3, P4> YarnFn<fn(_: P0, _: P1, _: P2, _: P3, _: P4) -> O> for F
where F: for<'a> Send + for<'a> Sync + for<'a> Clone + for<'a> Fn(P0, P1, P2, P3, P4) -> O + for<'a> Fn(<P0 as YarnFnParam>::Item<'a>, <P1 as YarnFnParam>::Item<'a>, <P2 as YarnFnParam>::Item<'a>, <P3 as YarnFnParam>::Item<'a>, <P4 as YarnFnParam>::Item<'a>), O: IntoYarnValueFromNonYarnValue + 'static, P0: YarnFnParam + 'static, P1: YarnFnParam + 'static, P2: YarnFnParam + 'static, P3: YarnFnParam + 'static, P4: YarnFnParam + 'static,

§

type Out = O

source§

impl<F, O, P0, P1, P2, P3, P4, P5> YarnFn<fn(_: P0, _: P1, _: P2, _: P3, _: P4, _: P5) -> O> for F
where F: for<'a> Send + for<'a> Sync + for<'a> Clone + for<'a> Fn(P0, P1, P2, P3, P4, P5) -> O + for<'a> Fn(<P0 as YarnFnParam>::Item<'a>, <P1 as YarnFnParam>::Item<'a>, <P2 as YarnFnParam>::Item<'a>, <P3 as YarnFnParam>::Item<'a>, <P4 as YarnFnParam>::Item<'a>, <P5 as YarnFnParam>::Item<'a>), O: IntoYarnValueFromNonYarnValue + 'static, P0: YarnFnParam + 'static, P1: YarnFnParam + 'static, P2: YarnFnParam + 'static, P3: YarnFnParam + 'static, P4: YarnFnParam + 'static, P5: YarnFnParam + 'static,

§

type Out = O

source§

impl<F, O, P0, P1, P2, P3, P4, P5, P6> YarnFn<fn(_: P0, _: P1, _: P2, _: P3, _: P4, _: P5, _: P6) -> O> for F
where F: for<'a> Send + for<'a> Sync + for<'a> Clone + for<'a> Fn(P0, P1, P2, P3, P4, P5, P6) -> O + for<'a> Fn(<P0 as YarnFnParam>::Item<'a>, <P1 as YarnFnParam>::Item<'a>, <P2 as YarnFnParam>::Item<'a>, <P3 as YarnFnParam>::Item<'a>, <P4 as YarnFnParam>::Item<'a>, <P5 as YarnFnParam>::Item<'a>, <P6 as YarnFnParam>::Item<'a>), O: IntoYarnValueFromNonYarnValue + 'static, P0: YarnFnParam + 'static, P1: YarnFnParam + 'static, P2: YarnFnParam + 'static, P3: YarnFnParam + 'static, P4: YarnFnParam + 'static, P5: YarnFnParam + 'static, P6: YarnFnParam + 'static,

§

type Out = O

source§

impl<F, O, P0, P1, P2, P3, P4, P5, P6, P7> YarnFn<fn(_: P0, _: P1, _: P2, _: P3, _: P4, _: P5, _: P6, _: P7) -> O> for F
where F: for<'a> Send + for<'a> Sync + for<'a> Clone + for<'a> Fn(P0, P1, P2, P3, P4, P5, P6, P7) -> O + for<'a> Fn(<P0 as YarnFnParam>::Item<'a>, <P1 as YarnFnParam>::Item<'a>, <P2 as YarnFnParam>::Item<'a>, <P3 as YarnFnParam>::Item<'a>, <P4 as YarnFnParam>::Item<'a>, <P5 as YarnFnParam>::Item<'a>, <P6 as YarnFnParam>::Item<'a>, <P7 as YarnFnParam>::Item<'a>), O: IntoYarnValueFromNonYarnValue + 'static, P0: YarnFnParam + 'static, P1: YarnFnParam + 'static, P2: YarnFnParam + 'static, P3: YarnFnParam + 'static, P4: YarnFnParam + 'static, P5: YarnFnParam + 'static, P6: YarnFnParam + 'static, P7: YarnFnParam + 'static,

§

type Out = O

source§

impl<F, O, P0, P1, P2, P3, P4, P5, P6, P7, P8> YarnFn<fn(_: P0, _: P1, _: P2, _: P3, _: P4, _: P5, _: P6, _: P7, _: P8) -> O> for F
where F: for<'a> Send + for<'a> Sync + for<'a> Clone + for<'a> Fn(P0, P1, P2, P3, P4, P5, P6, P7, P8) -> O + for<'a> Fn(<P0 as YarnFnParam>::Item<'a>, <P1 as YarnFnParam>::Item<'a>, <P2 as YarnFnParam>::Item<'a>, <P3 as YarnFnParam>::Item<'a>, <P4 as YarnFnParam>::Item<'a>, <P5 as YarnFnParam>::Item<'a>, <P6 as YarnFnParam>::Item<'a>, <P7 as YarnFnParam>::Item<'a>, <P8 as YarnFnParam>::Item<'a>), O: IntoYarnValueFromNonYarnValue + 'static, P0: YarnFnParam + 'static, P1: YarnFnParam + 'static, P2: YarnFnParam + 'static, P3: YarnFnParam + 'static, P4: YarnFnParam + 'static, P5: YarnFnParam + 'static, P6: YarnFnParam + 'static, P7: YarnFnParam + 'static, P8: YarnFnParam + 'static,

§

type Out = O

source§

impl<F, O, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9> YarnFn<fn(_: P0, _: P1, _: P2, _: P3, _: P4, _: P5, _: P6, _: P7, _: P8, _: P9) -> O> for F
where F: for<'a> Send + for<'a> Sync + for<'a> Clone + for<'a> Fn(P0, P1, P2, P3, P4, P5, P6, P7, P8, P9) -> O + for<'a> Fn(<P0 as YarnFnParam>::Item<'a>, <P1 as YarnFnParam>::Item<'a>, <P2 as YarnFnParam>::Item<'a>, <P3 as YarnFnParam>::Item<'a>, <P4 as YarnFnParam>::Item<'a>, <P5 as YarnFnParam>::Item<'a>, <P6 as YarnFnParam>::Item<'a>, <P7 as YarnFnParam>::Item<'a>, <P8 as YarnFnParam>::Item<'a>, <P9 as YarnFnParam>::Item<'a>), O: IntoYarnValueFromNonYarnValue + 'static, P0: YarnFnParam + 'static, P1: YarnFnParam + 'static, P2: YarnFnParam + 'static, P3: YarnFnParam + 'static, P4: YarnFnParam + 'static, P5: YarnFnParam + 'static, P6: YarnFnParam + 'static, P7: YarnFnParam + 'static, P8: YarnFnParam + 'static, P9: YarnFnParam + 'static,

§

type Out = O

source§

impl<F, O, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10> YarnFn<fn(_: P0, _: P1, _: P2, _: P3, _: P4, _: P5, _: P6, _: P7, _: P8, _: P9, _: P10) -> O> for F
where F: for<'a> Send + for<'a> Sync + for<'a> Clone + for<'a> Fn(P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10) -> O + for<'a> Fn(<P0 as YarnFnParam>::Item<'a>, <P1 as YarnFnParam>::Item<'a>, <P2 as YarnFnParam>::Item<'a>, <P3 as YarnFnParam>::Item<'a>, <P4 as YarnFnParam>::Item<'a>, <P5 as YarnFnParam>::Item<'a>, <P6 as YarnFnParam>::Item<'a>, <P7 as YarnFnParam>::Item<'a>, <P8 as YarnFnParam>::Item<'a>, <P9 as YarnFnParam>::Item<'a>, <P10 as YarnFnParam>::Item<'a>), O: IntoYarnValueFromNonYarnValue + 'static, P0: YarnFnParam + 'static, P1: YarnFnParam + 'static, P2: YarnFnParam + 'static, P3: YarnFnParam + 'static, P4: YarnFnParam + 'static, P5: YarnFnParam + 'static, P6: YarnFnParam + 'static, P7: YarnFnParam + 'static, P8: YarnFnParam + 'static, P9: YarnFnParam + 'static, P10: YarnFnParam + 'static,

§

type Out = O

source§

impl<F, O, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11> YarnFn<fn(_: P0, _: P1, _: P2, _: P3, _: P4, _: P5, _: P6, _: P7, _: P8, _: P9, _: P10, _: P11) -> O> for F
where F: for<'a> Send + for<'a> Sync + for<'a> Clone + for<'a> Fn(P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11) -> O + for<'a> Fn(<P0 as YarnFnParam>::Item<'a>, <P1 as YarnFnParam>::Item<'a>, <P2 as YarnFnParam>::Item<'a>, <P3 as YarnFnParam>::Item<'a>, <P4 as YarnFnParam>::Item<'a>, <P5 as YarnFnParam>::Item<'a>, <P6 as YarnFnParam>::Item<'a>, <P7 as YarnFnParam>::Item<'a>, <P8 as YarnFnParam>::Item<'a>, <P9 as YarnFnParam>::Item<'a>, <P10 as YarnFnParam>::Item<'a>, <P11 as YarnFnParam>::Item<'a>), O: IntoYarnValueFromNonYarnValue + 'static, P0: YarnFnParam + 'static, P1: YarnFnParam + 'static, P2: YarnFnParam + 'static, P3: YarnFnParam + 'static, P4: YarnFnParam + 'static, P5: YarnFnParam + 'static, P6: YarnFnParam + 'static, P7: YarnFnParam + 'static, P8: YarnFnParam + 'static, P9: YarnFnParam + 'static, P10: YarnFnParam + 'static, P11: YarnFnParam + 'static,

§

type Out = O

source§

impl<F, O, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12> YarnFn<fn(_: P0, _: P1, _: P2, _: P3, _: P4, _: P5, _: P6, _: P7, _: P8, _: P9, _: P10, _: P11, _: P12) -> O> for F
where F: for<'a> Send + for<'a> Sync + for<'a> Clone + for<'a> Fn(P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12) -> O + for<'a> Fn(<P0 as YarnFnParam>::Item<'a>, <P1 as YarnFnParam>::Item<'a>, <P2 as YarnFnParam>::Item<'a>, <P3 as YarnFnParam>::Item<'a>, <P4 as YarnFnParam>::Item<'a>, <P5 as YarnFnParam>::Item<'a>, <P6 as YarnFnParam>::Item<'a>, <P7 as YarnFnParam>::Item<'a>, <P8 as YarnFnParam>::Item<'a>, <P9 as YarnFnParam>::Item<'a>, <P10 as YarnFnParam>::Item<'a>, <P11 as YarnFnParam>::Item<'a>, <P12 as YarnFnParam>::Item<'a>), O: IntoYarnValueFromNonYarnValue + 'static, P0: YarnFnParam + 'static, P1: YarnFnParam + 'static, P2: YarnFnParam + 'static, P3: YarnFnParam + 'static, P4: YarnFnParam + 'static, P5: YarnFnParam + 'static, P6: YarnFnParam + 'static, P7: YarnFnParam + 'static, P8: YarnFnParam + 'static, P9: YarnFnParam + 'static, P10: YarnFnParam + 'static, P11: YarnFnParam + 'static, P12: YarnFnParam + 'static,

§

type Out = O

source§

impl<F, O, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13> YarnFn<fn(_: P0, _: P1, _: P2, _: P3, _: P4, _: P5, _: P6, _: P7, _: P8, _: P9, _: P10, _: P11, _: P12, _: P13) -> O> for F
where F: for<'a> Send + for<'a> Sync + for<'a> Clone + for<'a> Fn(P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13) -> O + for<'a> Fn(<P0 as YarnFnParam>::Item<'a>, <P1 as YarnFnParam>::Item<'a>, <P2 as YarnFnParam>::Item<'a>, <P3 as YarnFnParam>::Item<'a>, <P4 as YarnFnParam>::Item<'a>, <P5 as YarnFnParam>::Item<'a>, <P6 as YarnFnParam>::Item<'a>, <P7 as YarnFnParam>::Item<'a>, <P8 as YarnFnParam>::Item<'a>, <P9 as YarnFnParam>::Item<'a>, <P10 as YarnFnParam>::Item<'a>, <P11 as YarnFnParam>::Item<'a>, <P12 as YarnFnParam>::Item<'a>, <P13 as YarnFnParam>::Item<'a>), O: IntoYarnValueFromNonYarnValue + 'static, P0: YarnFnParam + 'static, P1: YarnFnParam + 'static, P2: YarnFnParam + 'static, P3: YarnFnParam + 'static, P4: YarnFnParam + 'static, P5: YarnFnParam + 'static, P6: YarnFnParam + 'static, P7: YarnFnParam + 'static, P8: YarnFnParam + 'static, P9: YarnFnParam + 'static, P10: YarnFnParam + 'static, P11: YarnFnParam + 'static, P12: YarnFnParam + 'static, P13: YarnFnParam + 'static,

§

type Out = O

source§

impl<F, O, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14> YarnFn<fn(_: P0, _: P1, _: P2, _: P3, _: P4, _: P5, _: P6, _: P7, _: P8, _: P9, _: P10, _: P11, _: P12, _: P13, _: P14) -> O> for F
where F: for<'a> Send + for<'a> Sync + for<'a> Clone + for<'a> Fn(P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14) -> O + for<'a> Fn(<P0 as YarnFnParam>::Item<'a>, <P1 as YarnFnParam>::Item<'a>, <P2 as YarnFnParam>::Item<'a>, <P3 as YarnFnParam>::Item<'a>, <P4 as YarnFnParam>::Item<'a>, <P5 as YarnFnParam>::Item<'a>, <P6 as YarnFnParam>::Item<'a>, <P7 as YarnFnParam>::Item<'a>, <P8 as YarnFnParam>::Item<'a>, <P9 as YarnFnParam>::Item<'a>, <P10 as YarnFnParam>::Item<'a>, <P11 as YarnFnParam>::Item<'a>, <P12 as YarnFnParam>::Item<'a>, <P13 as YarnFnParam>::Item<'a>, <P14 as YarnFnParam>::Item<'a>), O: IntoYarnValueFromNonYarnValue + 'static, P0: YarnFnParam + 'static, P1: YarnFnParam + 'static, P2: YarnFnParam + 'static, P3: YarnFnParam + 'static, P4: YarnFnParam + 'static, P5: YarnFnParam + 'static, P6: YarnFnParam + 'static, P7: YarnFnParam + 'static, P8: YarnFnParam + 'static, P9: YarnFnParam + 'static, P10: YarnFnParam + 'static, P11: YarnFnParam + 'static, P12: YarnFnParam + 'static, P13: YarnFnParam + 'static, P14: YarnFnParam + 'static,

§

type Out = O

source§

impl<F, O, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15> YarnFn<fn(_: P0, _: P1, _: P2, _: P3, _: P4, _: P5, _: P6, _: P7, _: P8, _: P9, _: P10, _: P11, _: P12, _: P13, _: P14, _: P15) -> O> for F
where F: for<'a> Send + for<'a> Sync + for<'a> Clone + for<'a> Fn(P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15) -> O + for<'a> Fn(<P0 as YarnFnParam>::Item<'a>, <P1 as YarnFnParam>::Item<'a>, <P2 as YarnFnParam>::Item<'a>, <P3 as YarnFnParam>::Item<'a>, <P4 as YarnFnParam>::Item<'a>, <P5 as YarnFnParam>::Item<'a>, <P6 as YarnFnParam>::Item<'a>, <P7 as YarnFnParam>::Item<'a>, <P8 as YarnFnParam>::Item<'a>, <P9 as YarnFnParam>::Item<'a>, <P10 as YarnFnParam>::Item<'a>, <P11 as YarnFnParam>::Item<'a>, <P12 as YarnFnParam>::Item<'a>, <P13 as YarnFnParam>::Item<'a>, <P14 as YarnFnParam>::Item<'a>, <P15 as YarnFnParam>::Item<'a>), O: IntoYarnValueFromNonYarnValue + 'static, P0: YarnFnParam + 'static, P1: YarnFnParam + 'static, P2: YarnFnParam + 'static, P3: YarnFnParam + 'static, P4: YarnFnParam + 'static, P5: YarnFnParam + 'static, P6: YarnFnParam + 'static, P7: YarnFnParam + 'static, P8: YarnFnParam + 'static, P9: YarnFnParam + 'static, P10: YarnFnParam + 'static, P11: YarnFnParam + 'static, P12: YarnFnParam + 'static, P13: YarnFnParam + 'static, P14: YarnFnParam + 'static, P15: YarnFnParam + 'static,

§

type Out = O