esr 0.1.0

ECMAScript-style language transpiler in Rust
Documentation
use crate::error::Error;

use crate::ast::{Node, Loc, NodeList, Pattern};
use crate::ast::{Name, ClassMember, Property, PropertyKey, MandatoryName, Block};
use crate::parser::Parser;

pub trait Handle<'ast> {
    fn handle_error(parser: &mut Parser<'ast>, err: Error) -> Self;
}

pub trait ToError {
    fn to_error() -> Self;
}

impl<'ast, I> ToError for Block<'ast, I> {
    fn to_error() -> Self {
        Block { body: NodeList::empty() }
    }
}

impl<'ast> ToError for MandatoryName<'ast> {
    fn to_error() -> Self {
        MandatoryName::empty()
    }
}

impl<'ast> ToError for Node<'ast, Property<'ast>> {
    fn to_error() -> Self {
        Node::new(&Loc {
            start: 0,
            end: 0,
            item: Property::Shorthand("")
        })
    }
}

impl<'ast> ToError for Node<'ast, ClassMember<'ast>> {
    fn to_error() -> Self {
        Node::new(&Loc {
            start: 0,
            end: 0,
            item: ClassMember::Error,
        })
    }
}

impl<'ast, T: 'ast + ToError> ToError for Loc<T> {
    fn to_error() -> Self {
        Loc {
            start: 0,
            end: 0,
            item: T::to_error()
        }
    }
}

impl<'ast, T: 'ast + Copy> ToError for NodeList<'ast, T> {
    fn to_error() -> Self {
        NodeList::empty()
    }
}

impl<'ast> ToError for Node<'ast, &'ast str> {
    fn to_error() -> Self {
        Node::new(&Loc {
            start: 0,
            end: 0,
            item: ""
        })
    }
}


impl<'ast> ToError for Pattern<'ast> {
    #[inline]
    fn to_error() -> Self {
        Pattern::Void
    }
}

impl<'ast> ToError for Node<'ast, Pattern<'ast>> {
    #[inline]
    fn to_error() -> Self {
        Node::new(&Loc {
            start: 0,
            end: 0,
            item: Pattern::Void
        })
    }
}

impl<'ast> ToError for Node<'ast, PropertyKey<'ast>> {
    #[inline]
    fn to_error() -> Self {
        Node::new(&Loc {
            start: 0,
            end: 0,
            item: PropertyKey::Literal("")
        })
    }
}

impl ToError for () {
    #[inline]
    fn to_error() {}
}