5个版本
0.1.7 | 2023年2月15日 |
---|---|
0.1.6 | 2023年2月14日 |
0.1.5 | 2022年12月15日 |
#90 在 模板引擎 中
32 每月下载量
59KB
821 行
雅典娜引擎
Rust的Web服务器引擎
外部库
[dependencies]
chrono = "0.4.23"
urlencoding = "2.1.2"
如何使用?
use std::collections::HashMap;
use AthenaEngine::server;
use AthenaEngine::server::page_manager::page_manager;
use AthenaEngine::server::page_manager::page_manager::PageInfo;
use AthenaEngine::server::response_parser::response_parser::{default_response_writer, IsResponseDataCreateSuccess, Response, ResponseCookies};
fn main() {
// All pages hashmap
let mut all_page_list: HashMap<String, PageInfo> = HashMap::new();
// 'hello.html' page setting
let hello_page_info : PageInfo = PageInfo {
file_path: "A:\\AthenaEngine\\Rust\\hello.html".to_string(), // HTML file path
is_access: true // File accessibility
};
// '/hello.html' -> connection name
// Insert hello page
all_page_list.insert(String::from("/hello.html"), hello_page_info);
// All pages list setting
unsafe {
page_manager::ALL_PAGES.pages = Some(all_page_list);
}
// Client connection event setting
unsafe {
// Request event setting
server::EVENT.event_request = Some(Box::new(|request| {
// Do
}));
// Response event setting
server::EVENT.event_response = Some(Box::new(|request| {
// Cookies setting
let mut cookies_list : Vec<ResponseCookies> = Vec::new();
let cookie : ResponseCookies = ResponseCookies {
name: "test-my-cookie".to_string(),
value: "test-my-cookie-value".to_string(),
path: "/".to_string(),
};
cookies_list.push(cookie);
// Default response packet
let response : Response = default_response_writer(&request, Some(cookies_list), None);
// Get response value
if response.is_success == IsResponseDataCreateSuccess::SUCCESS {
match &response.headers {
None => {}
Some(value) => {
// Print all headers
println!("{:?}", value);
}
}
}
// Return response
return response;
}));
}
// Open server
server::start_server(String::from("127.0.0.1"), 4444);
}
扩展模块描述
server::page_manager::page_template_parser (函数)
你可以调用体结构和模板函数。你也可以不使用此功能而使用外部模板引擎。
警告!此语法并非完美。程序员的操作可能不会如预期。
此语法需要换行符(\r\n)且在专用语法中不应缩进(Tab)。
< 语法 >
变量表示法:<#>var.(变量名)
循环语句表示法:<#>control.for (起始数),(结束数)
循环语句结束表示法:<#>control.for_end
< Rust文件 >
// Response event setting server::EVENT.event_response = Some(Box::new(|request| { // Default response packet let mut response : Response = default_response_writer(&request, None, None); // Parse html match &response.body { None => {} Some(response_body) => { match &response_body.body_str { None => {} Some(html) => { // Get default body // Add variable let mut var : HashMap<String, GetPageTemplateVar> = HashMap::new(); var.insert(String::from("variable_1"), Box::new(|| { return String::from("Hello my var!"); })); // Parsing html let change_body : String = page_template_parser(html.clone(), var); let change_body_len : String = change_body.clone().len().to_string(); // Apply original response body let response_body : ResponseBody = ResponseBody { body_str: Some(change_body), }; // Edit header let mut header : Option<HashMap<String, String>> = response.headers; let mut header_new : HashMap<String, String>; match header { None => { header_new = HashMap::new(); } Some(header) => { header_new = header; header_new.insert("Content-Length".to_string(), change_body_len); } } // Create new response let mut new_response : Response = Response { is_success: response.is_success, response_code: response.response_code, http_version: response.http_version, headers: Some(header_new), cookies: response.cookies, body: Some(response_body), }; return new_response; } } } } // Return response return response; }));
< HTML文件 >
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <#>var.variable_1 </br> <#>control.for 0,10 print 1 -- 10 </br> <#>control.for_end </body> </html>
log::log_writer, log::log_more_text_writer (函数)
专用的日志输出管理器让您可以美观地打印日志。
// Error log println!("{}", log_text_writer(error.to_string(), String::from("Log Generating entity"), LogTypeTag::WARNING)); println!("{}", log_more_text_writer(error.to_string(), String::from("Log Generating entity"), LogTypeTag::WARNING), String::from("More text")); // [Output Results] // 2022/12/16 01-29-51 INFO [MAIN/SERVER] [IP:127.0.0.1] Run request EVENT handler. // 2022/12/16 01-38-17 INFO [MAIN/SERVER/RESPONSE_PARSER] Default response packet creation succeeded.
许可证
MIT许可证
版权所有 (c) 2022 CHOI SI-HUN
任何获得此软件及其相关文档副本(“软件”)的人,均免费获得在此软件上不受限制的处理权,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,以及允许获得软件的人这样做,前提是必须遵守以下条件
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
本软件按“现状”提供,不提供任何明示或暗示的保证,包括但不限于适销性、适用于特定目的和不侵犯版权。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论此类责任是基于合同、侵权或其他方式产生,是否因软件或其使用或其他方式与软件相关。
依赖关系
~1MB
~18K SLoC