看到这样的 rust 代码要懵逼了,不知道咋入手,求指导

143 天前
 5261
pub async fn list(
    State(state): State<ArcAppState>,
    Query(frm): Query<form::subject::ListForAdmin>,
) -> Result<resp::JsonResp<model::subject::SubjectPaginate>> {
    let handler_name = "admin/subject/list";
    let p = get_pool(&state);
    let subjects = model::subject::Subject::list(
        &*p,
        &model::subject::SubjectListFilter {
            pq: model::subject::SubjectPaginateReq {
                page: frm.pq.page(),
                page_size: frm.pq.page_size(),
            },
            order: None,
            is_del: frm.is_del(),
            status: frm.status,
            name: frm.name,
            slug: frm.slug,
        },
    )
    .await
    .map_err(Error::from)
    .map_err(log_error(handler_name))?;
    Ok(resp::ok(subjects))
}


#[derive(Debug, Default, Deserialize, Serialize, sqlx::FromRow, Db)]
#[db(table = subjects, pk = id, del_field = is_del)]
pub struct Subject {
    #[db(find)]
    #[db(skip_update)]
    pub id: String,

    #[db(list_opt)]
    #[db(list_opt_like)]
    pub name: String,

    #[db(find)]
    #[db(exists)]
    #[db(list_opt)]
    #[db(list_opt_like)]
    pub slug: String,

    pub summary: String,

    #[db(find_opt)]
    #[db(list_opt)]
    pub is_del: bool,
    pub cover: String,

    #[db(list_opt)]
    pub status: Status,

    pub price: Decimal,
    pub pin: i32,
}

作为 Java 开发,看到这个 list 方法本能的想跳转过去看下这个 model::subject::Subject::list 方法的实现咋写的,但是跳转过去是宏? 那我咋知道最后是咋写的呢?

实在是懵逼~

2526 次点击
所在节点    Rust
8 条回复
zizon
143 天前
你们 mybatis/spring 不最喜欢干这种事么?
lait
143 天前
使用宏展开指令,就能看到最终的实现了,具体指令自己搜搜哈,不知道现在 VS Code 有相应的插件可以一键宏展开没有
5261
143 天前
@zizon 啥啊,mybatis 、spring 也至少能看到的具体的实现啊,这宏定义没办法 编译器生成之后的代码啊
5261
143 天前
@zizon 哥,我错了,刚去仔细看了下 宏的实现,确实是和 mybatis 的注解差不多,刚入 rust ,这宏看的我是真吃力
araraloren
127 天前
宏是非常高阶的技巧了,可以简单的 expands 看一下展开后的代码,也有插件可以 expand 代码片段,不过我喜欢全部展开对着看。
5261
127 天前
@araraloren 老哥能推荐下啥插件不? 宏 玩的好确实是真的 666 ,要是能拿来写 Java 的代码生成器就牛逼了
araraloren
126 天前
@5261 不知道,自己网上找呗。。
cppc
112 天前
JB 家的 RustRover ,鼠标放上去会显示宏展开后的完整代码,你试试

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1124699

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX