Trait casbin::rhai::FuncArgs

source ·
pub trait FuncArgs {
    // Required method
    fn parse<ARGS>(self, args: &mut ARGS)
       where ARGS: Extend<Dynamic>;
}
Expand description

Trait that parses arguments to a function call.

Any data type can implement this trait in order to pass arguments to [Engine::call_fn][crate::Engine::call_fn].

Required Methods§

source

fn parse<ARGS>(self, args: &mut ARGS)
where ARGS: Extend<Dynamic>,

Parse function call arguments into a container.

§Example
use rhai::{Engine, Dynamic, FuncArgs, Scope};

// A struct containing function arguments
struct Options {
    pub foo: bool,
    pub bar: String,
    pub baz: i64,
}

impl FuncArgs for Options {
    fn parse<ARGS: Extend<Dynamic>>(self, args: &mut ARGS) {
        args.extend(Some(self.foo.into()));
        args.extend(Some(self.bar.into()));
        args.extend(Some(self.baz.into()));
    }
}

let options = Options { foo: false, bar: "world".to_string(), baz: 42 };

let engine = Engine::new();
let mut scope = Scope::new();

let ast = engine.compile(
"
    fn hello(x, y, z) {
        if x { `hello ${y}` } else { y + z }
    }
")?;

let result: String = engine.call_fn(&mut scope, &ast, "hello", options)?;

assert_eq!(result, "world42");

Object Safety§

This trait is not object safe.

Implementations on Foreign Types§

source§

impl FuncArgs for ()

source§

fn parse<ARGS>(self, args: &mut ARGS)
where ARGS: Extend<Dynamic>,

source§

impl<A, B, C, D, E, F, G, H, J, K, L, M, N, P, Q, R, S, T, U, V> FuncArgs for (A, B, C, D, E, F, G, H, J, K, L, M, N, P, Q, R, S, T, U, V)
where A: Variant + Clone, B: Variant + Clone, C: Variant + Clone, D: Variant + Clone, E: Variant + Clone, F: Variant + Clone, G: Variant + Clone, H: Variant + Clone, J: Variant + Clone, K: Variant + Clone, L: Variant + Clone, M: Variant + Clone, N: Variant + Clone, P: Variant + Clone, Q: Variant + Clone, R: Variant + Clone, S: Variant + Clone, T: Variant + Clone, U: Variant + Clone, V: Variant + Clone,

source§

fn parse<ARGS>(self, args: &mut ARGS)
where ARGS: Extend<Dynamic>,

source§

impl<B, C, D, E, F, G, H, J, K, L, M, N, P, Q, R, S, T, U, V> FuncArgs for (B, C, D, E, F, G, H, J, K, L, M, N, P, Q, R, S, T, U, V)
where B: Variant + Clone, C: Variant + Clone, D: Variant + Clone, E: Variant + Clone, F: Variant + Clone, G: Variant + Clone, H: Variant + Clone, J: Variant + Clone, K: Variant + Clone, L: Variant + Clone, M: Variant + Clone, N: Variant + Clone, P: Variant + Clone, Q: Variant + Clone, R: Variant + Clone, S: Variant + Clone, T: Variant + Clone, U: Variant + Clone, V: Variant + Clone,

source§

fn parse<ARGS>(self, args: &mut ARGS)
where ARGS: Extend<Dynamic>,

source§

impl<C, D, E, F, G, H, J, K, L, M, N, P, Q, R, S, T, U, V> FuncArgs for (C, D, E, F, G, H, J, K, L, M, N, P, Q, R, S, T, U, V)
where C: Variant + Clone, D: Variant + Clone, E: Variant + Clone, F: Variant + Clone, G: Variant + Clone, H: Variant + Clone, J: Variant + Clone, K: Variant + Clone, L: Variant + Clone, M: Variant + Clone, N: Variant + Clone, P: Variant + Clone, Q: Variant + Clone, R: Variant + Clone, S: Variant + Clone, T: Variant + Clone, U: Variant + Clone, V: Variant + Clone,

source§

fn parse<ARGS>(self, args: &mut ARGS)
where ARGS: Extend<Dynamic>,

source§

impl<D, E, F, G, H, J, K, L, M, N, P, Q, R, S, T, U, V> FuncArgs for (D, E, F, G, H, J, K, L, M, N, P, Q, R, S, T, U, V)
where D: Variant + Clone, E: Variant + Clone, F: Variant + Clone, G: Variant + Clone, H: Variant + Clone, J: Variant + Clone, K: Variant + Clone, L: Variant + Clone, M: Variant + Clone, N: Variant + Clone, P: Variant + Clone, Q: Variant + Clone, R: Variant + Clone, S: Variant + Clone, T: Variant + Clone, U: Variant + Clone, V: Variant + Clone,

source§

fn parse<ARGS>(self, args: &mut ARGS)
where ARGS: Extend<Dynamic>,

source§

impl<E, F, G, H, J, K, L, M, N, P, Q, R, S, T, U, V> FuncArgs for (E, F, G, H, J, K, L, M, N, P, Q, R, S, T, U, V)
where E: Variant + Clone, F: Variant + Clone, G: Variant + Clone, H: Variant + Clone, J: Variant + Clone, K: Variant + Clone, L: Variant + Clone, M: Variant + Clone, N: Variant + Clone, P: Variant + Clone, Q: Variant + Clone, R: Variant + Clone, S: Variant + Clone, T: Variant + Clone, U: Variant + Clone, V: Variant + Clone,

source§

fn parse<ARGS>(self, args: &mut ARGS)
where ARGS: Extend<Dynamic>,

source§

impl<F, G, H, J, K, L, M, N, P, Q, R, S, T, U, V> FuncArgs for (F, G, H, J, K, L, M, N, P, Q, R, S, T, U, V)
where F: Variant + Clone, G: Variant + Clone, H: Variant + Clone, J: Variant + Clone, K: Variant + Clone, L: Variant + Clone, M: Variant + Clone, N: Variant + Clone, P: Variant + Clone, Q: Variant + Clone, R: Variant + Clone, S: Variant + Clone, T: Variant + Clone, U: Variant + Clone, V: Variant + Clone,

source§

fn parse<ARGS>(self, args: &mut ARGS)
where ARGS: Extend<Dynamic>,

source§

impl<G, H, J, K, L, M, N, P, Q, R, S, T, U, V> FuncArgs for (G, H, J, K, L, M, N, P, Q, R, S, T, U, V)
where G: Variant + Clone, H: Variant + Clone, J: Variant + Clone, K: Variant + Clone, L: Variant + Clone, M: Variant + Clone, N: Variant + Clone, P: Variant + Clone, Q: Variant + Clone, R: Variant + Clone, S: Variant + Clone, T: Variant + Clone, U: Variant + Clone, V: Variant + Clone,

source§

fn parse<ARGS>(self, args: &mut ARGS)
where ARGS: Extend<Dynamic>,

source§

impl<H, J, K, L, M, N, P, Q, R, S, T, U, V> FuncArgs for (H, J, K, L, M, N, P, Q, R, S, T, U, V)
where H: Variant + Clone, J: Variant + Clone, K: Variant + Clone, L: Variant + Clone, M: Variant + Clone, N: Variant + Clone, P: Variant + Clone, Q: Variant + Clone, R: Variant + Clone, S: Variant + Clone, T: Variant + Clone, U: Variant + Clone, V: Variant + Clone,

source§

fn parse<ARGS>(self, args: &mut ARGS)
where ARGS: Extend<Dynamic>,

source§

impl<J, K, L, M, N, P, Q, R, S, T, U, V> FuncArgs for (J, K, L, M, N, P, Q, R, S, T, U, V)
where J: Variant + Clone, K: Variant + Clone, L: Variant + Clone, M: Variant + Clone, N: Variant + Clone, P: Variant + Clone, Q: Variant + Clone, R: Variant + Clone, S: Variant + Clone, T: Variant + Clone, U: Variant + Clone, V: Variant + Clone,

source§

fn parse<ARGS>(self, args: &mut ARGS)
where ARGS: Extend<Dynamic>,

source§

impl<K, L, M, N, P, Q, R, S, T, U, V> FuncArgs for (K, L, M, N, P, Q, R, S, T, U, V)
where K: Variant + Clone, L: Variant + Clone, M: Variant + Clone, N: Variant + Clone, P: Variant + Clone, Q: Variant + Clone, R: Variant + Clone, S: Variant + Clone, T: Variant + Clone, U: Variant + Clone, V: Variant + Clone,

source§

fn parse<ARGS>(self, args: &mut ARGS)
where ARGS: Extend<Dynamic>,

source§

impl<L, M, N, P, Q, R, S, T, U, V> FuncArgs for (L, M, N, P, Q, R, S, T, U, V)
where L: Variant + Clone, M: Variant + Clone, N: Variant + Clone, P: Variant + Clone, Q: Variant + Clone, R: Variant + Clone, S: Variant + Clone, T: Variant + Clone, U: Variant + Clone, V: Variant + Clone,

source§

fn parse<ARGS>(self, args: &mut ARGS)
where ARGS: Extend<Dynamic>,

source§

impl<M, N, P, Q, R, S, T, U, V> FuncArgs for (M, N, P, Q, R, S, T, U, V)
where M: Variant + Clone, N: Variant + Clone, P: Variant + Clone, Q: Variant + Clone, R: Variant + Clone, S: Variant + Clone, T: Variant + Clone, U: Variant + Clone, V: Variant + Clone,

source§

fn parse<ARGS>(self, args: &mut ARGS)
where ARGS: Extend<Dynamic>,

source§

impl<N, P, Q, R, S, T, U, V> FuncArgs for (N, P, Q, R, S, T, U, V)
where N: Variant + Clone, P: Variant + Clone, Q: Variant + Clone, R: Variant + Clone, S: Variant + Clone, T: Variant + Clone, U: Variant + Clone, V: Variant + Clone,

source§

fn parse<ARGS>(self, args: &mut ARGS)
where ARGS: Extend<Dynamic>,

source§

impl<P, Q, R, S, T, U, V> FuncArgs for (P, Q, R, S, T, U, V)
where P: Variant + Clone, Q: Variant + Clone, R: Variant + Clone, S: Variant + Clone, T: Variant + Clone, U: Variant + Clone, V: Variant + Clone,

source§

fn parse<ARGS>(self, args: &mut ARGS)
where ARGS: Extend<Dynamic>,

source§

impl<Q, R, S, T, U, V> FuncArgs for (Q, R, S, T, U, V)
where Q: Variant + Clone, R: Variant + Clone, S: Variant + Clone, T: Variant + Clone, U: Variant + Clone, V: Variant + Clone,

source§

fn parse<ARGS>(self, args: &mut ARGS)
where ARGS: Extend<Dynamic>,

source§

impl<R, S, T, U, V> FuncArgs for (R, S, T, U, V)
where R: Variant + Clone, S: Variant + Clone, T: Variant + Clone, U: Variant + Clone, V: Variant + Clone,

source§

fn parse<ARGS>(self, args: &mut ARGS)
where ARGS: Extend<Dynamic>,

source§

impl<S, T, U, V> FuncArgs for (S, T, U, V)
where S: Variant + Clone, T: Variant + Clone, U: Variant + Clone, V: Variant + Clone,

source§

fn parse<ARGS>(self, args: &mut ARGS)
where ARGS: Extend<Dynamic>,

source§

impl<T> FuncArgs for Vec<T>
where T: Variant + Clone,

source§

fn parse<ARGS>(self, args: &mut ARGS)
where ARGS: Extend<Dynamic>,

source§

impl<T, U, V> FuncArgs for (T, U, V)
where T: Variant + Clone, U: Variant + Clone, V: Variant + Clone,

source§

fn parse<ARGS>(self, args: &mut ARGS)
where ARGS: Extend<Dynamic>,

source§

impl<T, const N: usize> FuncArgs for [T; N]
where T: Variant + Clone,

source§

fn parse<ARGS>(self, args: &mut ARGS)
where ARGS: Extend<Dynamic>,

source§

impl<U, V> FuncArgs for (U, V)
where U: Variant + Clone, V: Variant + Clone,

source§

fn parse<ARGS>(self, args: &mut ARGS)
where ARGS: Extend<Dynamic>,

source§

impl<V> FuncArgs for (V,)
where V: Variant + Clone,

source§

fn parse<ARGS>(self, args: &mut ARGS)
where ARGS: Extend<Dynamic>,

Implementors§