实战:用写一个小工具

核心提示因为不能用markdown排版,希望有更好的阅读体验可以关注我的同名公众号,谢谢。acurl在这篇文章里,我们会用rust实现一个类似于linux工具curl的一个小的cli工具,取个名字,就叫acurl吧。一、功能分析接受命令行参数,并解

因为不会用markdown排版,所以希望能有更好的阅读体验,关注我的同名微信官方账号。谢谢你。

acurl

在本文中,我们将使用rust实现一个类似于linux工具curl的小型cli工具。姑且称之为acurl吧。

一.功能分析

接受命令行参数,解析成rust能理解的参数-> CLAP。

创建一个带参数的http请求并获得响应- >reqwest

优雅的命令行输入->彩色

创建项目并添加依赖项

这里我们使用cargo来创建我们的项目,项目名为acurl。

货物新acurl

cd acurl

然后使用cargo add添加依赖项。

>货加总之拍彩色jsonxf mime reqwest tokio

然后打开Cargo.toml文件。

[包装]

name = "acurl "

版本= "0.1.0 "

edition = "2021 "

[依赖关系]

总之= "1.0.63" #错误处理

Clap = "3.2.20" #命令行解析

Colored = "2.0.0" #终端彩色显示

Jsonxf = "1.1.1" #json格式

Mime = "0.3.16" #处理Mime类型

Reqwest = "0.11.11" #http请求

Tokio = "1.21.0" #异步处理库

如您所见,cargo增加了依赖性。这里需要打开clap、reqwest和tokio的一些特性,在Cargo.toml文件中进行编辑。

clap = {version = "3.2.20 ",features = ["derive"]}

reqwest = {version = "0.11.11 ",features = ["json"]}

tokio = {version = "1.21.0 ",features = ["full"]}

二、Cli处理

在我们开始编写代码之前,我们使用cargo来生成关于依赖库的帮助文档,以帮助我们最初如何使用相关的依赖库。该命令如下所示:

货运单据-打开#此处-用浏览器打开

这里可以先看一下clap的帮助文档,这里我截取一下演示。

使用clap::Parser;

///问候一个人的简单程序

#[派生]

#[鼓掌]

结构参数{

///要问候的人的名字

#[鼓掌]

名称:字符串,

///问候的次数

#[鼓掌]

计数:u8,

}

fn main {

let Args = Args::parse;

0中的for _ in..args.count {

println!

}

}

可以看出,demo使用了clap的宏,使得命令行的参数变得简单。我们只需要描述数据结构,最后用clap提供的解析函数进行解析。虽然parse不是我们定义的,但是它是由# [derivative]自动生成的。参考这个演示,我们可以自己编写cli相关的代码。

使用clap::{Parser,AppSettings };

//下面///注释是文档,clap会作为cli的帮助使用。

///像curl这样的cli工具

#[派生]

#[鼓掌]

#[鼓掌]

结构选项{

#[鼓掌]

subcmd:子命令,

}

//子命令对应不同的请求方法,这里我们只定义get和post。

#[派生]

枚举子命令{

得到,

帖子,

}

//获取子命令

///使用get方法检索响应

#[派生]

结构获取{

///获取请求命令的url

url:字符串,

}

//post子命令

///用post方法检索响应

#[派生]

结构发布{

///post请求命令的url

url:字符串,

post请求命令的正文

正文:Vec,

}

fn main {

let Opts = Opts::parse;

println!;

}

然后我们编译并运行,

>货物建造。/target/debug/acurl

acurl 1.0

比弗达达

像curl这样的cli工具

用法:

acurl.exe

选项:

-h,help打印帮助信息

-V,- version打印版本信息

子命令:

使用get方法检索响应

帮助打印此消息或给定子命令的帮助

post使用post方法检索响应

可见,clap根据我们的评论生成的帮助信息也是非常优雅的。我们来看看post命令的帮助信息:

> ./target/debug/acurl post -h

acurl-post

使用post方法检索响应

用法:

acurl.exe邮报[正文]...

ARGS:

发布请求的Url

...帖子请求的正文

选项:

-h,- help打印帮助信息

让我们再次测试acurl是否能够正确解析post命令。

>./target/debug/acurl post www.baidu.com a = 1 b = 2

Opts { subcmd: Post }

正如您所看到的,命令行被成功解析,并且实现了期望的功能。请注意下一节的参数验证和网络请求。感谢阅读!

 
友情链接
鄂ICP备19019357号-22