Something went wrong. Try again.
🦦 a tiny cute lua web framework
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566const std = @import("std");const Io = std.Io;
const fern = @import("fern");const maivi = @import("maivi");const Lua = maivi.lua.Lua;
pub fn main(init: std.process.Init) !void { const config: maivi.Config = try .init(init.io, init.arena, init.environ_map);
maivi.allocator = init.gpa; maivi.config = &config;
try fern.init(init.io, maivi.allocator, .{ .level = .info, }); defer fern.deinit();
maivi.data.init(); defer maivi.data.deinit();
try maivi.lua.init(); defer maivi.lua.deinit();
var args = init.minimal.args.iterate(); _ = args.skip();
eval(maivi.lua.lua, init.io, init.arena.allocator(), &args) catch |e| switch (e) { error.NoArgs => std.debug.print("USAGE: nlua0 script.lua args...\n\n", .{}), else => return e, };}
pub fn eval(l: *Lua, io: Io, _: std.mem.Allocator, args: *std.process.Args.Iterator) !void { const firstarg = blk: { const first = args.next(); if (first) |arg| if (std.mem.eql(u8, arg, "-l")) break :blk args.next(); break :blk first; } orelse return error.NoArgs;
// assumes posix args l.createTable(@intCast(args.inner.remaining.len), 1); _ = l.pushString(firstarg); l.setIndexRaw(-2, 1);
var i: i32 = 2; while (args.next()) |arg| : (i += 1) { _ = l.pushString(arg); l.setIndexRaw(-2, i); } l.setGlobal("args");
_ = l.getGlobal("debug"); _ = l.getField(-1, "traceback"); const contents = try maivi.helpers.read_file(io, maivi.allocator, Io.Dir.cwd(), firstarg); defer maivi.allocator.free(contents); try l.loadBuffer(contents, firstarg); l.protectedCall(.{ .msg_handler = -2 }) catch |e| { if (e == error.LuaRuntime) { const msg = try l.toString(-1); std.debug.print("{s}\n", .{msg}); } return e; };}