详解Rust中的workspace

 更新时间:2022年03月21日 15:14:55   作者:菩提树下的杨过  
这篇文章主要向大家介绍Rust中的workspace,主要内容包括基础应用、实用技巧、原理机制等方面,这个概念在Rust中是通用的,只不过maven换成了cargo,而模块变成了crate,下面跟着小编通过一个例子给大家介绍下

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:St

假设在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" }

到此这篇关于Rust中的workspace的文章就介绍到这了,更多相关Rust workspace内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Rust 搭建一个小程序运行环境的方法详解

    Rust 搭建一个小程序运行环境的方法详解

    rust是一门比较新的编程语言,2015年5月15日,Rust编程语言核心团队正式宣布发布Rust 1.0版本,本文给大家介绍Rust 搭建一个小程序运行环境,以iOS 为例介绍开发环境的准备,感兴趣的朋友跟随小编一起看看吧
    2022-05-05
  • 详解Rust中泛型的使用

    详解Rust中泛型的使用

    泛型是一种在编写代码时不指定具体类型,而在使用时再确定类型的编程技巧,本文将详细介绍 Rust 中泛型的相关概念和用法,希望对大家有所帮助
    2023-06-06
  • Rust中的Trait与Trait Bounds详解

    Rust中的Trait与Trait Bounds详解

    Rust中的Trait与TraitBounds通过《西游记》的故事背景进行解释,Trait是一种接口定义机制,用于描述角色的能力;TraitBounds用于限制函数或结构体的参数类型必须实现某些trait;BlanketImplementations可以为所有实现了某类trait的类型提供默认的trait实现
    2025-02-02
  • 深入了解Rust中引用与借用的用法

    深入了解Rust中引用与借用的用法

    这篇文章主要为大家详细介绍了Rust语言中引用与借用的使用,文中的示例代码讲解详细,具有一定的借鉴价值,需要的小伙伴可以了解一下
    2022-11-11
  • Rust-使用dotenvy加载和使用环境变量的过程详解

    Rust-使用dotenvy加载和使用环境变量的过程详解

    系统的开发,测试和部署离不开环境变量,今天分享在Rust的系统开发中,使用dotenvy来读取和使用环境变量,感兴趣的朋友跟随小编一起看看吧
    2023-11-11
  • Rust编写自动化测试实例权威指南

    Rust编写自动化测试实例权威指南

    这篇文章主要为大家介绍了Rust编写自动化测试实例权威指南详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Rust之Substrate框架中的pallet详解

    Rust之Substrate框架中的pallet详解

    Pallet是Substrate区块链的基础模块,它定义了区块链的业务逻辑和状态转换规则。开发人员可以使用现有的Pallet来快速构建区块链,也可以开发自定义的Pallet来实现特定的功能,感兴趣的小伙伴可以参考阅读下
    2023-05-05
  • 使用Rust制作康威生命游戏的实现代码

    使用Rust制作康威生命游戏的实现代码

    这篇文章主要介绍了使用Rust制作康威生命游戏,初始rust项目,使用wasm的项目模板,结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09
  • Rust 数据分析利器polars用法详解

    Rust 数据分析利器polars用法详解

    这篇文章主要介绍了Rust 数据分析利器polars用法详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-08-08
  • 浅谈Rust中声明可见性

    浅谈Rust中声明可见性

    在Rust编程语言中,声明可见性是一个核心概念,本文主要介绍了Rust中声明可见性,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-05-05

最新评论