面试题答案
一键面试// 定义通用的API响应结构体
struct ApiResponse<T> {
data: T,
status: String,
}
// 示例实际代码实现不同类型数据的处理
fn main() {
// 处理i32类型数据
let int_response = ApiResponse {
data: 42,
status: "success".to_string(),
};
println!("Int Response: data = {}, status = {}", int_response.data, int_response.status);
// 处理String类型数据
let string_response = ApiResponse {
data: "Hello, World!".to_string(),
status: "success".to_string(),
};
println!("String Response: data = {}, status = {}", string_response.data, string_response.status);
}
在实际代码中,通过为ApiResponse
结构体指定不同的泛型参数T
,就可以处理不同类型的数据。例如,在上述代码中分别处理了i32
和String
类型的数据。在处理HTTP API响应时,可以根据实际返回的数据类型,在函数返回值中指定具体的ApiResponse
泛型实例。同时,结合序列化库(如serde
),可以方便地将ApiResponse
实例序列化为JSON或其他格式,发送给客户端。例如:
use serde::{Serialize, Deserialize};
#[derive(Serialize, Deserialize)]
struct ApiResponse<T> {
data: T,
status: String,
}
// 假设这是一个处理HTTP请求的函数
fn handle_request() -> Result<serde_json::Value, serde_json::Error> {
let response = ApiResponse {
data: "Some data".to_string(),
status: "success".to_string(),
};
serde_json::to_value(response)
}
这样就可以将ApiResponse
实例转换为JSON格式的数据进行响应。反序列化同理,使用serde_json::from_value
等方法将接收到的JSON数据转换为ApiResponse
实例。