use ruru::{RString, Object, Class, AnyObject}; use debug::RubyDebugInfo; pub trait TryFrom: Sized { type Error; fn try_from(value: T) -> Result; } #[inline] pub fn is_same_path(a: &str, b: &str) -> bool { if cfg!(windows) { a.to_uppercase() == b.to_uppercase() } else { a == b } } pub fn anyobject_to_string(item: AnyObject) -> Result { let result = &item; if Class::from_existing("String").case_equals(result) { return Ok(RString::from(result.value()).to_string()) } if Class::from_existing("Pathname").case_equals(result) { return Ok(result.instance_variable_get("@path"). try_convert_to::(). unwrap_or(RString::new("")). to_string()) } if result.respond_to("to_path") { return Ok(Class::from(result.send("to_path", None).value()). instance_variable_get("@path"). try_convert_to::(). unwrap_or(RString::new("")). to_string()) } Ok(RString::from(result.send("to_s", None).value()).to_string()) }