当前位置: 首页 > news >正文

网站开发和运行 法律灰大设计导航

网站开发和运行 法律,灰大设计导航,如何在百度上找网站,网站厨师短期培训班本人rust萌新#xff0c;写web碰到了这个#xff0c;基于ChatGPT和文心一言学了宏#xff0c;强行把这玩意实现出来了#xff0c;做个学习记录#xff0c;如果有更好的方法#xff0c;勿喷。 先看效果#xff0c;注意不支持嵌套#xff0c;且kv映射要用(因为它这个…本人rust萌新写web碰到了这个基于ChatGPT和文心一言学了宏强行把这玩意实现出来了做个学习记录如果有更好的方法勿喷。 先看效果注意不支持嵌套且kv映射要用(因为它这个只支持用箭头)即在这个宏语法内只支持单层kv但是你可以传value为HashMap。 对此我曾尝试用#[proc_macro]的TokenStream拿到变量名和值的方式实现正常使用花括号和冒号和深层字典但是太菜了搞不会。 如果能基于我的想法实现出深层kv欢迎评论区分享。 //第一个变量是msg后面的全部存入data{key1:...,key2:...} success!(success,key1 vec![1,2,3,4,5],key2 qwer,key3String::from(value) );//第一个变量没了就是默认空msg后面的全部存入data{key1:...,key2:...} success!(keyqwer,key21324, );fail!同理 rust中实现统一返回类有点麻烦比如我想返回固定格式 {success:true,msg:登录成功,data:{id:15,name:qwer} }我目前用的是actix-web虽然支持直接传入结构体对象作为json返回值但我有时候想对于data进行灵活的处理不想建那么多结构体 这里我基于serde_json的json!进行进一步封装 这里一个宏里面写两个形式因为要匹配传入msg和不传入msg的两种情形。最后一个$(,)?是允许最后一个多余的逗号换行时好看一点 // 随便找个文件放 // 用了#[macro_export]的宏会直接放在crate下//下面三个库需要在使用下面宏的地方进行use此处use没用 // use actix_web::web; // use serde_json::json; // use std::collections::HashMap;#[macro_export] macro_rules! success {// 没有msg的情况($($key:expr $value:expr),* $(,)?) {{let mut resp HashMap::new();resp.insert(success, json!(true));resp.insert(msg, json!()); // 提供一个默认的消息let mut data:HashMapString,Value HashMap::new();$(data.insert($key, json!($value));)*resp.insert(data,json!(data));web::Json(json!(resp))}};// 有msg的情况($msg:expr, $($key:expr $value:expr),* $(,)?) {{let mut resp HashMap::new();resp.insert(success, json!(true));resp.insert(msg, json!($msg)); // 提供一个默认的消息let mut data:HashMapString,Value HashMap::new();$(data.insert($key, json!($value));)*resp.insert(data,json!(data));web::Json(json!(resp))}}; }#[macro_export] macro_rules! fail {// 没有$msg的情况($($key:expr $value:expr),* $(,)?) {{let mut resp HashMap::new();resp.insert(success, json!(false));resp.insert(msg, json!());let mut data:HashMapString,Value HashMap::new();$(data.insert($key, json!($value));)*resp.insert(data,data);web::Json(json!(resp))}};// 有$msg的情况($msg:expr, $($key:expr $value:expr),* $(,)?) {{let mut resp HashMap::new();resp.insert(success, json!(false));resp.insert(msg, json!($msg));let mut data:HashMapString,Value HashMap::new();$(data.insert($key, json!($value));)*resp.insert(data,json!(data));web::Json(json!(resp))}}; }注意过程宏需要定义在一个单独的crate中主要是因为过程宏是一段在编译crate前对其代码进行加工的代码而这段是需要在编译后执行的。若是将定义过程宏和使用过程宏放到同一个crate中就会陷入编译“死锁” 另一个文件对其进行调用 // 注意是在crate下面的 use crate::success; use actix_web::{get,web::{self, Json}, }; use serde_json::{json, Value}; use std::collections::HashMap;#[get(/login)] async fn login() - JsonValue {let resp success!(success,key1 vec![1,2,3,4,5],key2 qwer,key3String::from(value));resp }我理解的这个宏就是字符串替换因为他是编译阶段处理的所以宏所在rs文件的use是无效的即使用了宏的文件需要对于宏使用的第三方库进行use这个有点恶心问题不大。
http://www.hkea.cn/news/14532278/

相关文章:

  • 徐州网站制作案例水源logo设计制作网
  • 四川高速公路建设集团网站做网盘网站的成本
  • 网站模板 自适应多语言的网站
  • 网站建设的方案模板wordpress主页
  • 开发一个软件app需要多少钱宁波seo外包服务商
  • 网站建设用户体验郑州平面设计公司排名
  • 域名备案网站站长seo综合查询
  • 企业网站建设的参考文献网站如何做微信支付宝支付宝支付宝
  • 利用网站源代码建立网站网站做我女朋友
  • 网站建设与运营培训班南宁网页制作步骤
  • wordpress建设购物网站万州网络科技有限公司
  • 网站建设推广市场wordpress tag伪静态
  • 要给公司做一个网站怎么做的吗网站建设首页面
  • 做网站的如何找业务申请企业邮箱收费吗
  • 简单编程代码seo短视频入口引流
  • 企业网站设计与管理系统邯郸移动网站建设价格
  • 学网站开发工程师难学吗合肥做网站公司有哪些
  • 网站信息备案变更 哪里做wordpress 流水 插件
  • 网站做优化有什么好处山东省建设监理协会网站打不开
  • 北京网站开发招聘58山东建设厅证件查询网址
  • 网站怎么做速排英文网站建设公司
  • 校园网站建设的基本条件题库网站建设的绩效指标
  • 轻淘客cms建站教程鸿蒙系统app开发
  • 给客户做一个网站ppt怎么做网上下载的网站后台安全吗
  • 景安网站上传完还要怎么做上饶市建设局官方网站
  • 网站开发人员晋升体系百度关键词排名优化
  • sogo提交网站入口深圳市知名广告公司
  • 蜘蛛爬网站网页设计好看的模板
  • 绍兴住房和城乡建设厅网站网站免费网站免费优化优化
  • 东莞做网站多少钱如何让别人网站降权