lucia-lang 0.2.0

Lucia programming language
Documentation
use std::io;

use crate::{
    check_args,
    objects::{AnyCallback, CallbackReturn, IntoValue, Table, Value},
    utils::Join,
    Context,
};

pub fn io_lib(ctx: Context<'_>) -> Table<'_> {
    let t = Table::new(&ctx);
    t.set(
        ctx,
        "print",
        AnyCallback::from_fn(&ctx, |_ctx, args| {
            match args.len() {
                0 => (),
                1 => print!("{}", args.first().unwrap()),
                _ => print!("{}", args.iter().join(" ")),
            };
            Ok(CallbackReturn::Return(Value::Null))
        }),
    );
    t.set(
        ctx,
        "println",
        AnyCallback::from_fn(&ctx, |_ctx, args| {
            match args.len() {
                0 => println!(),
                1 => println!("{}", args.first().unwrap()),
                _ => println!("{}", args.iter().join(" ")),
            }
            Ok(CallbackReturn::Return(Value::Null))
        }),
    );
    t.set(
        ctx,
        "input",
        AnyCallback::from_fn(&ctx, |ctx, args| {
            check_args!(args);
            let mut t = String::new();
            io::stdin().read_line(&mut t).unwrap();
            Ok(CallbackReturn::Return(
                t.strip_suffix('\n')
                    .unwrap_or(&t)
                    .to_string()
                    .into_value(ctx),
            ))
        }),
    );
    t
}