1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
use sys::{VALUE, Qnil}; use super::{FromRuby, CheckResult, ToRuby, ToRubyResult}; impl<T: FromRuby> FromRuby for Option<T> { type Checked = Option<T::Checked>; fn from_ruby(value: VALUE) -> CheckResult<Option<T::Checked>> { if unsafe { value == Qnil } { Ok(None) } else { T::from_ruby(value).map(|c| Some(c)) } } fn from_checked(checked: Option<T::Checked>) -> Option<T> { checked.map(T::from_checked) } } impl<T> ToRuby for Option<T> where T: ToRuby { fn to_ruby(self) -> ToRubyResult { match self { Some(value) => value.to_ruby(), None => Ok(unsafe { Qnil }) } } }