clover-std 0.1.3

A scripting language.
Documentation
use clover::{State, Object, NativeModel};
use clover::debug::RuntimeError;
use clover::helper::make_reference;

pub struct IO;

impl NativeModel for IO {
    fn model_get(&self, key: &str) -> Result<Object, RuntimeError> {
        match key {
            "print" => Ok(Object::NativeFunction(print)),
            "readline" => Ok(Object::NativeFunction(readline)),
            _ => Ok(Object::Null)
        }
    }
}


pub fn print(_state: &mut State, parameters: &[ Object ]) -> Result<Object, RuntimeError> {

    for object in parameters {
        print!("{}", object.to_string());
    };

    println!();

    Ok(Object::Null)
}

fn readline(state: &mut State, _parameters: &[ Object ]) -> Result<Object, RuntimeError> {
    let mut line = String::new();
    if let Err(error) = std::io::stdin().read_line(&mut line) {
        Err(RuntimeError::new(error.to_string().as_str(), state.last_position()))
    } else {
        Ok(Object::String(make_reference(line)))
    }
}