From 6c0096d8ac6d97c433dd7827e747d0e9464fb84e Mon Sep 17 00:00:00 2001 From: Alex Orlenko Date: Thu, 3 Jun 2021 23:52:29 +0100 Subject: [PATCH] Update examples --- examples/async_http_client.rs | 17 ++++++++--------- examples/async_http_reqwest.rs | 9 +++------ examples/async_http_server.rs | 12 +++++------- examples/async_tcp_server.rs | 12 +++++------- 4 files changed, 21 insertions(+), 29 deletions(-) diff --git a/examples/async_http_client.rs b/examples/async_http_client.rs index f8c0793..1c113d6 100644 --- a/examples/async_http_client.rs +++ b/examples/async_http_client.rs @@ -1,12 +1,11 @@ use std::collections::HashMap; use std::sync::Arc; -use bstr::BString; use hyper::body::{Body as HyperBody, HttpBody as _}; use hyper::Client as HyperClient; use tokio::sync::Mutex; -use mlua::{Error, Lua, Result, UserData, UserDataMethods}; +use mlua::{ExternalResult, Lua, Result, UserData, UserDataMethods}; #[derive(Clone)] struct BodyReader(Arc>); @@ -19,11 +18,11 @@ impl BodyReader { impl UserData for BodyReader { fn add_methods<'lua, M: UserDataMethods<'lua, Self>>(methods: &mut M) { - methods.add_async_method("read", |_, reader, ()| async move { + methods.add_async_method("read", |lua, reader, ()| async move { let mut reader = reader.0.lock().await; if let Some(bytes) = reader.data().await { - let bytes = bytes.map_err(Error::external)?; - return Ok(Some(BString::from(bytes.as_ref()))); + let bytes = bytes.to_lua_err()?; + return Some(lua.create_string(&bytes)).transpose(); } Ok(None) }); @@ -36,18 +35,18 @@ async fn main() -> Result<()> { let fetch_url = lua.create_async_function(|lua, uri: String| async move { let client = HyperClient::new(); - let uri = uri.parse().map_err(Error::external)?; - let resp = client.get(uri).await.map_err(Error::external)?; + let uri = uri.parse().to_lua_err()?; + let resp = client.get(uri).await.to_lua_err()?; let lua_resp = lua.create_table()?; lua_resp.set("status", resp.status().as_u16())?; let mut headers = HashMap::new(); - for (key, value) in resp.headers().iter() { + for (key, value) in resp.headers() { headers .entry(key.as_str()) .or_insert(Vec::new()) - .push(value.to_str().unwrap()); + .push(value.to_str().to_lua_err()?); } lua_resp.set("headers", headers)?; diff --git a/examples/async_http_reqwest.rs b/examples/async_http_reqwest.rs index e80051a..b7a199c 100644 --- a/examples/async_http_reqwest.rs +++ b/examples/async_http_reqwest.rs @@ -1,4 +1,4 @@ -use mlua::{Error, Lua, LuaSerdeExt, Result}; +use mlua::{ExternalResult, Lua, LuaSerdeExt, Result}; #[tokio::main] async fn main() -> Result<()> { @@ -10,11 +10,8 @@ async fn main() -> Result<()> { let resp = reqwest::get(&uri) .await .and_then(|resp| resp.error_for_status()) - .map_err(Error::external)?; - let json = resp - .json::() - .await - .map_err(Error::external)?; + .to_lua_err()?; + let json = resp.json::().await.to_lua_err()?; lua.to_value(&json) })?; globals.set("fetch_json", fetch_json)?; diff --git a/examples/async_http_server.rs b/examples/async_http_server.rs index 6eb9fa1..17d60b0 100644 --- a/examples/async_http_server.rs +++ b/examples/async_http_server.rs @@ -1,5 +1,4 @@ use std::net::SocketAddr; -use std::sync::Arc; use hyper::server::conn::AddrStream; use hyper::service::{make_service_fn, service_fn}; @@ -7,13 +6,12 @@ use hyper::{Body, Request, Response, Server}; use mlua::{Error, Function, Lua, Result, Table, UserData, UserDataMethods}; -#[derive(Clone)] -struct LuaRequest(Arc<(SocketAddr, Request)>); +struct LuaRequest(SocketAddr, Request); impl UserData for LuaRequest { fn add_methods<'lua, M: UserDataMethods<'lua, Self>>(methods: &mut M) { - methods.add_method("remote_addr", |_lua, req, ()| Ok((req.0).0.to_string())); - methods.add_method("method", |_lua, req, ()| Ok((req.0).1.method().to_string())); + methods.add_method("remote_addr", |_lua, req, ()| Ok((req.0).to_string())); + methods.add_method("method", |_lua, req, ()| Ok((req.1).method().to_string())); } } @@ -25,7 +23,7 @@ async fn run_server(handler: Function<'static>) -> Result<()> { Ok::<_, Error>(service_fn(move |req: Request| { let handler = handler.clone(); async move { - let lua_req = LuaRequest(Arc::new((remote_addr, req))); + let lua_req = LuaRequest(remote_addr, req); let lua_resp: Table = handler.call_async(lua_req).await?; let body = lua_resp .get::<_, Option>("body")? @@ -72,7 +70,7 @@ async fn main() -> Result<()> { ["X-Req-Method"] = req:method(), ["X-Remote-Addr"] = req:remote_addr(), }, - body = "Hello, World!" + body = "Hello, World!\n" } end "#, diff --git a/examples/async_tcp_server.rs b/examples/async_tcp_server.rs index 5153cfe..6363993 100644 --- a/examples/async_tcp_server.rs +++ b/examples/async_tcp_server.rs @@ -1,14 +1,12 @@ use std::sync::Arc; -use bstr::BString; use tokio::io::{AsyncReadExt, AsyncWriteExt}; use tokio::net::{TcpListener, TcpStream}; use tokio::sync::Mutex; use tokio::task; -use mlua::{Function, Lua, Result, UserData, UserDataMethods}; +use mlua::{Function, Lua, Result, String as LuaString, UserData, UserDataMethods}; -#[derive(Clone)] struct LuaTcp; #[derive(Clone)] @@ -41,15 +39,15 @@ impl UserData for LuaTcpStream { Ok(stream.0.lock().await.peer_addr()?.to_string()) }); - methods.add_async_method("read", |_, stream, size: usize| async move { + methods.add_async_method("read", |lua, stream, size: usize| async move { let mut buf = vec![0; size]; let n = stream.0.lock().await.read(&mut buf).await?; buf.truncate(n); - Ok(BString::from(buf)) + lua.create_string(&buf) }); - methods.add_async_method("write", |_, stream, data: BString| async move { - let n = stream.0.lock().await.write(&data).await?; + methods.add_async_method("write", |_, stream, data: LuaString| async move { + let n = stream.0.lock().await.write(&data.as_bytes()).await?; Ok(n) });