如何在Rust的Rocket框架中从Form中解封装结构体数据
Rocket中解封装Form类型获取内部结构体实例的方法
Rocket的Form<T>是一个透明封装器,你可以通过以下几种方式获取内部的MyStructForm实例:
- 使用
.into_inner()方法(官方推荐)
这个方法会消耗Form实例,直接返回内部的结构体:
#[post("/an/url", data="<input>")] pub fn post_an_url(input: Form<MyStructForm>) -> Result<Json<u32>, String> { let my_struct = input.into_inner(); // my_struct 现在是 MyStructForm 类型,可直接操作其字段 Ok(Json(my_struct.item2)) }
- 模式匹配解构
通过模式匹配可以直接取出内部结构体,支持消耗或借用两种方式:
#[post("/an/url", data="<input>")] pub fn post_an_url(input: Form<MyStructForm>) -> Result<Json<u32>, String> { // 消耗Form实例,获取所有权 let Form(my_struct) = input; // 如果只需借用,可写成 let Form(ref my_struct) = input; Ok(Json(my_struct.item2)) }
- 直接访问字段(无需显式解封装)
因为Form<T>实现了Dereftrait,你可以直接通过input访问内部结构体的字段,无需手动解封装:
#[post("/an/url", data="<input>")] pub fn post_an_url(input: Form<MyStructForm>) -> Result<Json<u32>, String> { // 自动解引用到MyStructForm,直接访问字段 Ok(Json(input.item2)) }
内容的提问来源于stack exchange,提问作者FabienM
相关产品推荐
相关产品推荐

