5个版本

0.1.7 2023年2月15日
0.1.6 2023年2月14日
0.1.5 2022年12月15日

#90模板引擎

32 每月下载量

MIT 许可证

59KB
821

crates.io MIT licensed

雅典娜引擎

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