use std::collections::HashMap;
trait Model<'a, I, L, S, D> {
fn info(&self, req: &'a mut I);
fn list(&self, req: &'a mut L);
fn save(&self, data: S);
fn del(&self, req: D);
}
struct TidbModel;
impl<'a, I, L> Model<'a, QueryRequest<'a, I>, ListRequest<'a, L>, SaveData, QueryFilter>
for TidbModel
{
fn info(&self, req: &'a mut QueryRequest<'a, I>) {
println!("----info-----");
// req data needs to be modified
}
fn list(&self, req: &'a mut ListRequest<'a, L>) {
println!("----list-----");
// you need to modify the data data of the query in req
}
fn save(&self, data: SaveData) {
println!("----save-----");
}
fn del(&self, req: QueryFilter) {
println!("----del-----");
}
}
struct QueryRequest<'a, T> {
data: &'a mut T,
}
struct ListRequest<'a, T> {
query: QueryRequest<'a, T>,
}
type SaveData = Vec<String>;
type QueryFilter = HashMap<String, String>;
// Here is an example call
fn main() {
let mut tidb_model = TidbModel;
// Call the info method
let mut i = 10;
let mut query_request = QueryRequest { data: &mut i };
tidb_model.info(&mut query_request);
// Call list method
let mut l = "list_data";
let mut list_request = ListRequest {
query: QueryRequest { data: &mut l },
};
tidb_model.list(&mut list_request);
// Call the save method
let save_data = vec!["save_item1".to_string(), "save_item2".to_string()];
tidb_model.save(save_data);
// Call del method
let query_filter = HashMap::from([("key1".to_string(), "value1".to_string())]);
tidb_model.del(query_filter);
}
The error is as follows:
In addition to solving the above solution, what is the room for optimization in such a writing