diff --git a/picolib/lib.rs b/picolib/lib.rs index ed125713ee26bb04762a7d834f2f518c678fbab5..a6287fa2257f3202ac5b41b27a256bab80b481c7 100644 --- a/picolib/lib.rs +++ b/picolib/lib.rs @@ -36,12 +36,10 @@ fn main_run() { tarantool::version() ); - let mut cfg = tarantool::Cfg::default(); - - std::env::var("PICODATA_LISTEN").ok().and_then(|v| { - cfg.listen = v.clone(); - Some(v) - }); + let mut cfg = tarantool::Cfg { + listen: None, + ..Default::default() + }; std::env::var("PICODATA_DATA_DIR").ok().and_then(|v| { std::fs::create_dir_all(&v).unwrap(); @@ -50,6 +48,17 @@ fn main_run() { Some(v) }); - println!("{:?}", cfg); - tarantool::set_cfg(cfg); + tarantool::set_cfg(&cfg); + tarantool::eval( + r#" + box.schema.user.grant('guest', 'super', nil, nil, {if_not_exists = true}) + "#, + ); + + std::env::var("PICODATA_LISTEN").ok().and_then(|v| { + cfg.listen = Some(v.clone()); + Some(v) + }); + + tarantool::set_cfg(&cfg); } diff --git a/picolib/tarantool.rs b/picolib/tarantool.rs index 9304ac2dba81d7fe05f892c78ab8c35fe14250ad..6cd9da54a715fb2a03a0c50254b38ec14e1fb34c 100644 --- a/picolib/tarantool.rs +++ b/picolib/tarantool.rs @@ -32,7 +32,7 @@ fn tarantool_L() -> Lua { #[derive(Clone, Debug, hlua::Push, hlua::LuaRead, PartialEq)] pub struct Cfg { - pub listen: String, + pub listen: Option<String>, pub wal_dir: String, pub memtx_dir: String, } @@ -40,7 +40,7 @@ pub struct Cfg { impl Default for Cfg { fn default() -> Self { Self { - listen: "3301".to_owned(), + listen: Some("3301".to_owned()), wal_dir: ".".to_owned(), memtx_dir: ".".to_owned(), } @@ -50,15 +50,21 @@ impl Default for Cfg { #[allow(dead_code)] pub fn cfg() -> Option<Cfg> { let l = tarantool_L(); - let cfg: Result<Cfg, _> = l.execute("return box.cfg"); + let cfg: Result<Cfg, _> = l.eval("return box.cfg"); match cfg { Ok(v) => Some(v), Err(_) => None, } } -pub fn set_cfg(cfg: Cfg) { +pub fn set_cfg(cfg: &Cfg) { let l = tarantool_L(); - let box_cfg = LuaFunction::load(l, "box.cfg(...)").unwrap(); + let box_cfg = LuaFunction::load(l, "return box.cfg(...)").unwrap(); box_cfg.call_with_args(cfg).unwrap() } + +pub fn eval(code: &str) { + let l = tarantool_L(); + let f = LuaFunction::load(l, code).unwrap(); + f.call().unwrap() +}