Delete src/server/lua_engine.rs

This commit is contained in:
Григорий Сафронов 2025-12-06 15:56:44 +00:00
parent 5dbe2af865
commit 4244b4c0c2

View File

@ -1,142 +0,0 @@
// src/server/lua_engine.rs
//! Встроенный интерпретатор Lua (на основе rlua)
use rlua::{Lua, RluaCompat};
use std::sync::Arc;
use std::fs;
use std::path::Path;
use crate::common::Result;
use crate::common::protocol;
use crate::server::database::{Trigger, TriggerEvent, Index, IndexType};
/// Движок Lua для выполнения скриптов
#[derive(Clone)]
pub struct LuaEngine {
lua: Arc<Lua>,
}
impl LuaEngine {
pub fn new() -> Result<Self> {
let lua = Lua::new();
// Настройка Lua окружения
lua.load(r#"
function futriix_log(message)
print("LUA: " .. message)
end
function futriix_error(message)
print("LUA ERROR: " .. message)
end
"#).exec()?;
Ok(Self { lua: Arc::new(lua) })
}
/// Выполнение Lua скрипта из файла
#[allow(dead_code)]
pub fn execute_script_file(&self, file_path: &str) -> Result<()> {
let script_content = fs::read_to_string(file_path)
.map_err(|e| crate::common::FutriixError::LuaError(format!("Failed to read script file {}: {}", file_path, e)))?;
self.execute_script(&script_content)
}
/// Выполнение Lua скрипта из строки
pub fn execute_script(&self, script: &str) -> Result<()> {
let lua = self.lua.clone();
lua.load(script).exec()?;
Ok(())
}
/// Выполнение всех скриптов из директории
#[allow(dead_code)]
pub fn execute_scripts_from_dir(&self, dir_path: &str, script_names: &[String]) -> Result<()> {
let path = Path::new(dir_path);
if !path.exists() {
println!("Lua scripts directory does not exist: {}", path.display());
return Ok(());
}
if !path.is_dir() {
return Err(crate::common::FutriixError::LuaError(
format!("Lua scripts path is not a directory: {}", path.display())
));
}
for script_name in script_names {
let script_path = path.join(script_name);
if script_path.exists() && script_path.is_file() {
println!("Executing Lua script: {}", script_path.display());
match self.execute_script_file(script_path.to_str().unwrap()) {
Ok(_) => println!("✓ Script executed successfully: {}", script_name),
Err(e) => eprintln!("✗ Failed to execute script {}: {}", script_name, e),
}
} else {
println!("Script not found: {}", script_path.display());
}
}
Ok(())
}
/// Регистрация функций базы данных в Lua
pub fn register_db_functions(
&self,
db: Arc<crate::server::database::Database>,
sharding_manager: Arc<crate::server::sharding::ShardingManager>
) -> Result<()> {
let lua = self.lua.clone();
// Создаем таблицу для функций БД
let futriix_db = lua.create_table()?;
// Базовые CRUD функции
let db_clone = db.clone();
futriix_db.set("create", lua.create_function(move |_, (collection, data): (String, String)| {
let command = protocol::Command::Create {
collection,
document: data.into_bytes(),
};
match db_clone.execute_command(command) {
Ok(_) => Ok(()),
Err(e) => Err(rlua::Error::RuntimeError(e.to_string())),
}
})?)?;
let db_clone = db.clone();
futriix_db.set("read", lua.create_function(move |_, (collection, id): (String, String)| {
let command = protocol::Command::Read {
collection,
id,
};
match db_clone.execute_command(command) {
Ok(response) => {
match response {
protocol::Response::Success(data) => {
Ok(String::from_utf8_lossy(&data).to_string())
}
protocol::Response::Error(e) => {
Err(rlua::Error::RuntimeError(e))
}
}
}
Err(e) => Err(rlua::Error::RuntimeError(e.to_string())),
}
})?)?;
// Добавляем таблицу в глобальное пространство имен
lua.globals().set("futriix_db", futriix_db)?;
Ok(())
}
/// Получение директории Lua скриптов
fn lua_scripts_dir(&self) -> &'static str {
"lua_scripts"
}
}