• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Rust中的workspace

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

java项目中用maven管理代码时,如果遇到大型工程,一般会拆分成不同的模块,比如spring-mvc中,通常会按model, view, controller建3个模块,然后根据一定的依赖关系进行引用。这个概念在Rust中是通用的,只不过maven换成了cargo,而模块变成了crate,看下面的例子。

 一、目录结构

.
├── Cargo.toml
├── controller
│   ├── Cargo.toml
│   └── src
│       └── main.rs
├── model
│   ├── Cargo.toml
│   └── src
│       └── lib.rs
└── view
    ├── Cargo.toml
    └── src
        └── lib.rs

根目录下的Cargo.toml,类似maven中的父pom.xml,可以在其中声明子"模块":(注:为了避免与rust中的mod"模块"产生混淆,后面还是用crate来称呼“子模块”)

[workspace]

members=[
    "model",
    "view",
    "controller"
]

 这里声明了1个所谓的workspace,其中有3个成员,即3个目录对应的crate

  

二、子crata中的Cargo.toml声明

假设上面的工程结构中: 

  • model不依赖其它crate
  • view依赖model
  • controller依赖view及model

则这3个crate中的Cargo.toml文件,可以这样写:

model/Cargo.toml

[package]
name = "model"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
# 不依赖其它crate,此节点为空即可

  

view/Cargo.toml

[package]
name = "view"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
# 声明依赖model
model = {path = "../model"}

 

controll/Cargo.toml

[package]
name = "controller"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
model = {path = "../model"}
view = {path = "../view"}

  

三、代码引用

有了前面的各crate依赖声明,就可以来写代码了,参见下面的示例:

3.1 model/src/lib.rs

#[derive(Debug)]
pub struct User{
   pub username:String,
   pub password:String
}

#[derive(Debug)]
pub struct Order{
    pub orderno:String
}

假设在model中定义了2个结构体(即:OOP中的class)

 

3.2 view/src/lib.rs

//使用model中的User类
use model::User;

pub fn get_login_info(name:String,pass:String)->User{
    User{
        username:name,
        password:pass
    }
}

  

3.3 controller/src/main.rs

use view::get_login_info;
use model::{User,Order};

fn main() {
    let mut u = get_login_info(String::from("test"), String::from("123456"));
    u.password = String::from("abcde");
    println!("{:?}", u);

    let o = Order{
        orderno:String::from("20211244123")
    };
    println!("{:?}",o);

    let u1 = User{
        username:String::from("abcd"),
        password:String::from("*123*J")
    };
    println!("{:?}",u1);
}

  

运行结果:

User { username: "test", password: "abcde" }
Order { orderno: "20211244123" }
User { username: "abcd", password: "*123*J" }

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Rust 语言 1.25 版本发布,编译器升级至 LLVM 6发布时间:2022-07-18
下一篇:
MATLAB——nctoolbox安装及使用发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap