首页 > 其他分享 >rust may_minihttp server

rust may_minihttp server

时间:2024-07-22 22:56:07浏览次数:14  
标签:mut may bytes server rsp minihttp rust

Cargo.toml:

[package]
name = "demo"
version = "0.1.0"
edition = "2021"

[dependencies]
bytes = "1.6.1"
may = "0.3.45"
may_minihttp = { git = "https://github.com/Xudong-Huang/may_minihttp.git" }
yarte = { version = "0.15.7", features = ["json"] }

main.rs:

use bytes::BufMut;
use may_minihttp::{HttpService, HttpServiceFactory, Request, Response};
use std::io::{self, Write};
use yarte::Serialize;

#[derive(Serialize)]
struct HelloMessage {
    message: &'static str,
}

struct Techempower {}

impl HttpService for Techempower {
    fn call(&mut self, req: Request, rsp: &mut Response) -> io::Result<()> {
        // Bare-bones router
        match req.path() {
            "/json" => {
                rsp.header("Content-Type: application/json");
                let hello = HelloMessage {
                    message: "Hello, World!",
                }
                .to_bytes::<String>(1024);
                let mut w = rsp.body_mut().writer();
                w.write(hello.as_bytes())?;
            }
            "/plaintext" => {
                rsp.header("Content-Type: text/plain").body("Hello, World!");
            }
            _ => {
                rsp.status_code(404, "Not Found");
            }
        }

        Ok(())
    }
}

struct HttpServer {}

impl HttpServiceFactory for HttpServer {
    type Service = Techempower;

    fn new_service(&self, _: usize) -> Self::Service {
        Techempower {}
    }
}

fn main() {
    may::config().set_pool_capacity(500).set_stack_size(0x1000);
    let http_server = HttpServer {};
    let server = http_server.start("0.0.0.0:8080").unwrap();
    server.join().unwrap();
}

标签:mut,may,bytes,server,rsp,minihttp,rust
From: https://www.cnblogs.com/soarowl/p/18317194

相关文章

  • Rust语言圣经-流程控制
    提问索引访问集合和for遍历有什么区别回答//第一种letcollection=[1,2,3,4,5];foriin0..collection.len(){letitem=collection[i];//...}//第二种foritemincollection{}使用索引(第一种)访问会因边界访问导致性能损耗;当遍历集合发生改变......
  • 【Rust光年纪】解锁Rust语言核心库奥秘:加密、数字签名和数据库操作全面解析
    从加密到数据库:探索Rust语言丰富的工具库生态系统前言在Rust语言开发中,使用合适的库可以极大地提高代码的安全性和效率。本文将介绍一些用于加密、数字签名、数据库连接等功能的Rust语言库,帮助读者快速了解其核心功能、使用场景以及安装配置等方面的信息。欢迎订阅专栏:R......
  • 【发现】Rust-for-Linux_的成败得失
    https://www.usenix.org/system/files/atc24-li-hongyu.pdfRFL(RustforLinux)从2013年开始筹备进入Linux内核,自从2022年以来,合并了20K行代码到Linux主线,成为了Linux除了ebpf和io_uring之外最活跃的子系统。本文主要回答了3个问题:RFL现状如何:RFL的代码主......
  • Rust生命周期,看这一篇就够了~
    https://blog.csdn.net/vince1998/article/details/138324413生命周期为什么要提出、是什么、怎么用导航生命周期为什么要提出、是什么、怎么用一、生命周期为什么要提出二、生命周期是什么三、生命周期怎么用1、生命周期标注(1)引用类型标注(2)函数参数生命周期标注(3)结构体字段中生......
  • 【Rust】使用日志记录利器flexi_logger
    Flexi_logger简介​flexi_logger​是一个功能强大且灵活的日志记录库,用于Rust语言的应用程序。它提供了丰富的配置选项和功能,适用于各种日志记录需求,从简单的控制台输出到复杂的文件日志管理。以下是对flexi_logger​的一些关键功能和特性的简介:主要功能多种日志目标:支持将日......
  • 选择Maya进行3D动画制作与渲染的理由
    如果你对3D动画充满热情并追求成为专业3D动画师的梦想,你一定听说过Maya——近年来3D动画的行业标准。Maya被3D艺术家广泛使用,你是否想知道为什么Maya总是他们的首选?下面一起来了解下。一、什么是Maya?由Autodesk开发的Maya是一款专业的3D软件,用于创建逼真的角色和大片级别的特效......
  • rust各种库
    ndarrayndarray是NumPy库中的一个核心数据结构,它是一个用于表示多维数组的对象。ndarray在存储和操作大型多维数组时非常高效,广泛应用于科学计算、数据分析、机器学习等领域。在Rust开发中,ndarray库可以作为替代 NumPy库。Github地址:https://github.com/rust-ndarra......
  • Rust 中的枚举有啥不同
    提问Rust中的枚举有啥不同回答枚举中每一项可以有自己的数据类型enumMessage{Quit,Move{x:i32,y:i32},Write(String),ChangeColor(i32,i32,i32),}可以用来做统一流程处理类似于其他语言中的接口同一化类型最后,再用一个实际项目中的......
  • rust+openGL
    如果是C语言,适合用Nuklear如果是C++语言,适合用ElementsC++GUIlibrary如果是Go语言,适合用therecipe/qt如果是Python,适合用Tkinter如果是JS,用Vue+Bootstrap+ElementUI最为简单如果是小程序,用官方组件+WeUI组件如果是C#,直接用.NetFramework就可以了但是,每个语言都有自己擅长做的......
  • 0181-汇编调用 Rust
    环境Time2022-11-12WSL-Ubuntu22.04QEMU6.2.0NASM2.15.05Rust1.67.0-nightly前言说明参考:https://os.phil-opp.com/set-up-rust/目标从汇编代码中调用Rust代码。该篇基于之前编写的进入64位模式的汇编代码。切换到nightly版本切换命令:rustupoverridese......