From a634528d02d435baa158f14d1d50d05e8104fee0 Mon Sep 17 00:00:00 2001 From: ato Date: Thu, 16 Feb 2023 19:04:50 +0100 Subject: [PATCH] feat: create an async fs lua module --- examples/multipart.lua | 9 +++++---- src/api/builtins.rs | 14 -------------- src/api/fs.rs | 16 ++++++++++++++++ src/api/mod.rs | 23 ++++++++++++++++++++++- src/cli/main.rs | 3 ++- 5 files changed, 45 insertions(+), 20 deletions(-) delete mode 100644 src/api/builtins.rs create mode 100644 src/api/fs.rs diff --git a/examples/multipart.lua b/examples/multipart.lua index c9dde96..4c05120 100644 --- a/examples/multipart.lua +++ b/examples/multipart.lua @@ -1,11 +1,12 @@ local app = create_app() app:post("/", function(req,res) - for k,v in pairs(req.parts) do - print("name", k) - print("filename", v.filename) - print("content", v.content) + if req.parts.myfile == nil then + res.status = 400 + res.body = "Missing myfile field" + return res end + fs:write("yololo.txt", req.parts.myfile.content) return res end) diff --git a/src/api/builtins.rs b/src/api/builtins.rs deleted file mode 100644 index 73dd1d0..0000000 --- a/src/api/builtins.rs +++ /dev/null @@ -1,14 +0,0 @@ -use mlua::Lua; -use std::time::Duration; -use tokio::time::sleep; - -pub fn load_builtins(lua: &Lua) { - let sleep = lua - .create_async_function(|_l, n: u64| async move { - sleep(Duration::from_secs(n)).await; - Ok(()) - }) - .unwrap(); - - lua.globals().set("sleep", sleep).unwrap(); -} diff --git a/src/api/fs.rs b/src/api/fs.rs new file mode 100644 index 0000000..030cc79 --- /dev/null +++ b/src/api/fs.rs @@ -0,0 +1,16 @@ +use mlua::UserData; + +#[derive(Clone)] +pub struct FS {} + +impl UserData for FS { + fn add_methods<'lua, M: mlua::UserDataMethods<'lua, Self>>(methods: &mut M) { + methods.add_async_method( + "write", + |_l, _this, (filename, contents): (String, String)| async move { + tokio::fs::write(filename, contents).await.unwrap(); + Ok(()) + }, + ) + } +} diff --git a/src/api/mod.rs b/src/api/mod.rs index 5085ee9..af36abf 100644 --- a/src/api/mod.rs +++ b/src/api/mod.rs @@ -1 +1,22 @@ -pub mod builtins; +pub mod fs; + +use mlua::Lua; +use std::time::Duration; +use tokio::time::sleep; + +use self::fs::FS; + +pub fn load_builtins(lua: &Lua) { + let sleep = lua + .create_async_function(|_l, n: u64| async move { + sleep(Duration::from_secs(n)).await; + Ok(()) + }) + .unwrap(); + + lua.globals().set("sleep", sleep).unwrap(); +} + +pub fn load_apis(lua: &Lua) { + lua.globals().set("fs", FS {}).unwrap(); +} diff --git a/src/cli/main.rs b/src/cli/main.rs index 82e0233..0fac1c7 100644 --- a/src/cli/main.rs +++ b/src/cli/main.rs @@ -1,7 +1,7 @@ use std::error::Error; use std::{env, fs}; -use tchoutchou::api::builtins::load_builtins; +use tchoutchou::api::{load_apis, load_builtins}; use tchoutchou::internal::core::runtime::Runtime; #[tokio::main] @@ -30,6 +30,7 @@ async fn main() -> Result<(), Box> { }; runtime.load(&load_builtins); + runtime.load(&load_apis); runtime.start().await; Ok(())