Rust日报镜像工具Goldboot最新资讯(2024年5月12日)

在最新一期《Rust日报》中,报道了关于镜像工具Goldboot的相关内容,Goldboot是一款重要的镜像工具,具有广泛的应用场景,它能够帮助开发者方便地创建、管理和部署镜像,提高开发效率和安全性,本期《Rust日报》为读者提供了关于Goldboot的最新动态和相关信息,以便开发者更好地了解和使用这一工具。

Goldboot

goldboot 是一款用于为真实硬件构建机器镜像的工具,能够实现接近不可变的基础设施,而无需进行大量额外的工作。

Rust日报镜像工具Goldboot最新资讯(2024年5月12日)

在 Goldboot 的方法中,可以为每台部署的计算机创建一个声明性配置文件。利用这个配置文件,Goldboot 可以在本地计算机或 CI 平台(如 Github Actions)上构建镜像。生成的镜像可以通过 USB 驱动器或 PXE 启动部署到实际硬件上。

【Rust日报】2024-05-12 镜像工具GoldbootGitHub: https://www.php.cn/link/64566c7205d7788234fa94f496ae3478

Valitron v0.4.1

Valitron 是一个用于 Rust 的字段校验工具。

新版本的更新包括:

  • 新增电子邮件规则
  • 新增正则表达式规则
  • 添加 IP 和 URL 规则

示例代码语言:javascript,运行次数:0

fn main() {
    let validator = Validator::new()
        .rule("name", Required.and(StartWith("hello")))
        .rule("age", custom(age_limit))
        .message([
            ("name.required", "name is required"),
            ("name.start_with", "name should be starts with `hello`"),
        ]);
    let person = Person {
        name: "li",
        age: 18,
    };
    let res = validator.validate(person);
    // or using trait
    let res = person.validate(validator);
}

fn age_limit(n: &mut u8) -> Result {
    if *n >= 25 && *n 

GitHub: https://www.php.cn/link/d2f53008ecf7568f1abeb455e1dcf5e4

Zeke

Zeke 是一个基于 Tokio 的 HTTP 库,专注于简单和极简主义。以下是一些示例:

代码语言:javascript,运行次数:0

use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use zeke::http::{
    context::{get_context, set_context, Contextable},
    handler::Handler,
    middleware::{Middleware, MiddlewareGroup},
    response::{new_response, set_header},
    router::{Route, Router},
};

#[tokio::main]
async fn main() {
    //================================================================
    // creating a router
    //================================================================
    let mut r = Router::new();
    //================================================================
    // creating a handler
    //================================================================
    pub fn handle_home() -> Handler {
        return Handler::new(|request| {
            let response = new_response(200, "

Home

About"); let response = set_header(response, "Content-Type", "text/html"); return (request, response); }); } pub fn handle_about() -> Handler { return Handler::new(|request| { let response = new_response(200, "

About

Home"); let response = set_header(response, "Content-Type", "text/html"); return (request, response); }); } //================================================================ // creating a type to represent shared state //================================================================ pub enum AppContext { Trace, } impl Contextable for AppContext { fn key(&self) -> &'static str { match self { AppContext::Trace => {"TRACE"}, } } } //================================================================ // creating a middleware to track when our request starts //================================================================ pub fn mw_trace() -> Middleware { return Middleware::new(|request| { let trace = HttpTrace{ time_stamp: chrono::Utc::now().to_rfc3339(), }; let trace_encoded = serde_json::to_string(&trace); match trace_encoded { Ok(trace_encoded) => { set_context(request, AppContext::Trace, trace_encoded); return None; }, Err(_) => { return Some(new_response(500, "failed to encode trace")); } } }); } //================================================================ // creating a middleware to log our request processing time //================================================================ pub fn mw_trace_log() -> Middleware { return Middleware::new(|request| { let trace = get_context(&request.context, AppContext::Trace); if trace == "" { return Some(new_response(500, "trace not found")); } let trace: HttpTrace = serde_json::from_str(&trace).unwrap(); let elapsed_time = trace.get_time_elapsed(); let log_message = format!("[{}][{}][{}]", request.method, request.path, elapsed_time); println!("{}", log_message); return None; }); } //================================================================ // grouping middleware for reusability //================================================================ pub fn mw_group_trace() -> MiddlewareGroup { return MiddlewareGroup::new(vec![mw_trace()], vec![mw_trace_log()]); } //================================================================ // creating a type to track our request processing time //================================================================ #[derive(Debug, Serialize, Deserialize)] pub struct HttpTrace { pub time_stamp: String, } impl HttpTrace { /// Prints the time elapsed since the `time_stamp` was set. pub fn get_time_elapsed(&self) -> String { if let Ok(time_set) = DateTime::parse_from_rfc3339(&self.time_stamp) { let time_set = time_set.with_timezone(&Utc); let now = Utc::now(); let duration = now.signed_duration_since(time_set); let micros = duration.num_microseconds(); match micros { Some(micros) => { if micros { } } } let millis = duration.num_milliseconds(); return format!("{}ms", millis); } else { return "failed to parse time_stamp".to_string(); } } } //================================================================ // mounting handlers with middleware/outerware //================================================================ // mount a handler with middleware/outerware r.add(Route::new("GET /", handle_home()) .middleware(mw_trace()) .outerware(mw_trace_log()) ); // mount a handler with a middleware group r.add(Route::new("GET /about", handle_about()) .group(mw_group_trace()) ); //================================================================ // starting the server //================================================================ let err = r.serve("127.0.0.1:8080").await; match err { Some(e) => { println!("Error: {:?}", e); }, None => { println!("Server closed"); }, } }

GitHub: https://www.php.cn/link/a555ec5f81ae0b44cb4a94424aa510bf

Ufetch

Ufetch 是一个简单的 Linux 系统信息获取工具。

使用方法:

$ ufetch

它提供以下信息:操作系统(OS)、内核(Kernel)、主机名(Host)、Shell、已安装软件包(Packages)、CPU、GPU、内存(Memory)、磁盘(Disk)等。

GitHub: https://www.php.cn/link/c227f47adae0efadb834fcf162f5bbd5

网友留言(0 条)

发表评论