[][src]Trait glsp::FromVal

pub trait FromVal {
    fn from_val(val: &Val) -> Result<Self, GError>;
}

A type which can be converted from a GameLisp value.

Many functions in the glsp crate have a generic return value R: FromVal. They can automatically convert their return value to many different Rust types.

let numbers: Vec<u8> = glsp::global("numbers")?;
let text: Root<Str> = arr.pop()?;

Implementing the FromVal trait for your own types will also enable them to take advantage of automatic conversions for RFn arguments.

struct Rgb(u8, u8, u8);

impl FromVal for Rgb {
	fn from_val(val: &Val) -> GResult<Rgb> {
		let (r, g, b) = <(u8, u8, u8)>::from_val(val)?; 
		Ok(Rgb(r, g, b))
	}
}

fn invert(src: Rgb) -> Rgb {
	let Rgb(r, g, b) = src;
	Rgb(255 - r, 255 - g, 255 - b)
}

glsp::bind_rfn("invert", rfn!(invert))?;

Writing T::from_val(v)? is usually the most convenient way to destructure a Val. FromVal is part of the prelude, so there's no need to import it into scope.

let f = f64::from_val(val)?;

Required methods

fn from_val(val: &Val) -> Result<Self, GError>

Loading content...

Implementations on Foreign Types

impl FromVal for Ordering[src]

impl<T> FromVal for [T; 12] where
    T: FromVal
[src]

impl FromVal for i128[src]

impl<T> FromVal for [T; 14] where
    T: FromVal
[src]

impl<A, B> FromVal for (A, B) where
    A: FromVal,
    B: FromVal
[src]

impl<T> FromVal for [T; 3] where
    T: FromVal
[src]

impl FromVal for usize[src]

impl<A> FromVal for (A,) where
    A: FromVal
[src]

impl<T> FromVal for [T; 15] where
    T: FromVal
[src]

impl<A, B, C, D> FromVal for (A, B, C, D) where
    A: FromVal,
    B: FromVal,
    C: FromVal,
    D: FromVal
[src]

impl<T> FromVal for [T; 1] where
    T: FromVal
[src]

impl FromVal for i64[src]

impl FromVal for PathBuf[src]

impl<T> FromVal for [T; 5] where
    T: FromVal
[src]

impl FromVal for u64[src]

impl<T> FromVal for [T; 8] where
    T: FromVal
[src]

impl<A, B, C, D, E, F, G, H, I, J, K> FromVal for (A, B, C, D, E, F, G, H, I, J, K) where
    A: FromVal,
    B: FromVal,
    C: FromVal,
    D: FromVal,
    E: FromVal,
    F: FromVal,
    G: FromVal,
    H: FromVal,
    I: FromVal,
    J: FromVal,
    K: FromVal
[src]

impl FromVal for char[src]

impl FromVal for i32[src]

impl<T> FromVal for [T; 6] where
    T: FromVal
[src]

impl<A, B, C, D, E, F, G, H, I, J, K, L> FromVal for (A, B, C, D, E, F, G, H, I, J, K, L) where
    A: FromVal,
    B: FromVal,
    C: FromVal,
    D: FromVal,
    E: FromVal,
    F: FromVal,
    G: FromVal,
    H: FromVal,
    I: FromVal,
    J: FromVal,
    K: FromVal,
    L: FromVal
[src]

impl FromVal for isize[src]

impl<T> FromVal for Vec<T> where
    T: FromVal
[src]

impl<T> FromVal for [T; 10] where
    T: FromVal
[src]

impl<A, B, C> FromVal for (A, B, C) where
    A: FromVal,
    B: FromVal,
    C: FromVal
[src]

impl<T> FromVal for [T; 4] where
    T: FromVal
[src]

impl FromVal for u8[src]

impl FromVal for bool[src]

impl<K, V, S> FromVal for HashMap<K, V, S> where
    K: Hash + Eq + FromVal,
    S: BuildHasher + Default,
    V: FromVal
[src]

impl<K, V> FromVal for BTreeMap<K, V> where
    K: FromVal + Ord,
    V: FromVal
[src]

impl<T> FromVal for [T; 2] where
    T: FromVal
[src]

impl FromVal for f64[src]

impl FromVal for OsString[src]

impl<A> FromVal for SmallVec<A> where
    A: Array,
    <A as Array>::Item: FromVal
[src]

impl<A, B, C, D, E, F> FromVal for (A, B, C, D, E, F) where
    A: FromVal,
    B: FromVal,
    C: FromVal,
    D: FromVal,
    E: FromVal,
    F: FromVal
[src]

impl<T> FromVal for [T; 11] where
    T: FromVal
[src]

impl FromVal for u16[src]

impl<A, B, C, D, E, F, G, H, I, J> FromVal for (A, B, C, D, E, F, G, H, I, J) where
    A: FromVal,
    B: FromVal,
    C: FromVal,
    D: FromVal,
    E: FromVal,
    F: FromVal,
    G: FromVal,
    H: FromVal,
    I: FromVal,
    J: FromVal
[src]

impl<A, B, C, D, E, F, G, H, I> FromVal for (A, B, C, D, E, F, G, H, I) where
    A: FromVal,
    B: FromVal,
    C: FromVal,
    D: FromVal,
    E: FromVal,
    F: FromVal,
    G: FromVal,
    H: FromVal,
    I: FromVal
[src]

impl FromVal for f32[src]

impl<T> FromVal for [T; 13] where
    T: FromVal
[src]

impl<A, B, C, D, E, F, G> FromVal for (A, B, C, D, E, F, G) where
    A: FromVal,
    B: FromVal,
    C: FromVal,
    D: FromVal,
    E: FromVal,
    F: FromVal,
    G: FromVal
[src]

impl FromVal for i8[src]

impl FromVal for u32[src]

impl<T> FromVal for [T; 0] where
    T: FromVal
[src]

impl<A, B, C, D, E> FromVal for (A, B, C, D, E) where
    A: FromVal,
    B: FromVal,
    C: FromVal,
    D: FromVal,
    E: FromVal
[src]

impl<T> FromVal for VecDeque<T> where
    T: FromVal
[src]

impl FromVal for CString[src]

impl FromVal for i16[src]

impl<T> FromVal for [T; 16] where
    T: FromVal
[src]

impl<T> FromVal for [T; 7] where
    T: FromVal
[src]

impl FromVal for u128[src]

impl<A, B, C, D, E, F, G, H> FromVal for (A, B, C, D, E, F, G, H) where
    A: FromVal,
    B: FromVal,
    C: FromVal,
    D: FromVal,
    E: FromVal,
    F: FromVal,
    G: FromVal,
    H: FromVal
[src]

impl<T> FromVal for [T; 9] where
    T: FromVal
[src]

impl FromVal for String[src]

Loading content...

Implementors

impl FromVal for Callable[src]

impl FromVal for Deque[src]

impl FromVal for EnvMode[src]

impl FromVal for Expander[src]

impl FromVal for Iterable[src]

impl FromVal for Num[src]

impl FromVal for Val[src]

impl FromVal for RFn[src]

impl FromVal for Root<Arr>[src]

impl FromVal for Root<Class>[src]

impl FromVal for Root<Coro>[src]

impl FromVal for Root<GFn>[src]

impl FromVal for Root<GIter>[src]

impl FromVal for Root<Obj>[src]

impl FromVal for Root<RData>[src]

impl FromVal for Root<Str>[src]

impl FromVal for Root<Tab>[src]

impl FromVal for Sym[src]

impl<T> FromVal for RRoot<T> where
    T: RStore
[src]

Loading content...