blob: 726112cfe6e69454728d12d48da2d9eb8a3b5240 [file] [log] [blame]
use std::prelude::v1::*;
use std::any::Any;
use object::Object;
pub struct VMError {
inner: Box<Object>
}
impl<T> From<T> for VMError where T: Object + 'static {
fn from(other: T) -> VMError {
VMError {
inner: Box::new(other)
}
}
}
impl<'a> From<&'a str> for VMError {
fn from(other: &'a str) -> VMError {
VMError {
inner: Box::new(other.to_string())
}
}
}
impl VMError {
pub fn unwrap(self) -> Box<Object> {
self.inner
}
}
pub struct ValidateError {
description: String
}
impl Object for ValidateError {
fn get_children(&self) -> Vec<usize> {
Vec::new()
}
fn as_any(&self) -> &Any {
self as &Any
}
fn as_any_mut(&mut self) -> &mut Any {
self as &mut Any
}
fn to_str(&self) -> &str {
self.description.as_str()
}
}
impl ValidateError {
pub fn new<T: ToString>(desc: T) -> ValidateError {
ValidateError {
description: desc.to_string()
}
}
}
pub struct ParseError {
description: String
}
impl Object for ParseError {
fn get_children(&self) -> Vec<usize> {
Vec::new()
}
fn as_any(&self) -> &Any {
self as &Any
}
fn as_any_mut(&mut self) -> &mut Any {
self as &mut Any
}
fn to_str(&self) -> &str {
self.description.as_str()
}
}
impl ParseError {
pub fn new<T: ToString>(desc: T) -> ParseError {
ParseError {
description: desc.to_string()
}
}
}
pub struct RuntimeError {
description: String
}
impl Object for RuntimeError {
fn get_children(&self) -> Vec<usize> {
Vec::new()
}
fn as_any(&self) -> &Any {
self as &Any
}
fn as_any_mut(&mut self) -> &mut Any {
self as &mut Any
}
fn to_str(&self) -> &str {
self.description.as_str()
}
}
impl RuntimeError {
pub fn new<T: ToString>(desc: T) -> RuntimeError {
RuntimeError {
description: desc.to_string()
}
}
}
pub struct FieldNotFoundError {
field_name: String
}
impl Object for FieldNotFoundError {
fn get_children(&self) -> Vec<usize> {
Vec::new()
}
fn as_any(&self) -> &Any {
self as &Any
}
fn as_any_mut(&mut self) -> &mut Any {
self as &mut Any
}
fn to_string(&self) -> String {
format!("Field not found: {}", self.field_name)
}
}
impl FieldNotFoundError {
pub fn from_field_name<T: ToString>(name: T) -> FieldNotFoundError {
FieldNotFoundError {
field_name: name.to_string()
}
}
}