使用Rust开发命令行工具

这篇具有很好参考价值的文章主要介绍了使用Rust开发命令行工具。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

生成二进制文件,将其扔到环境变量的path下即可~


用rust打造实时天气命令行工具[1]


找到合适的API

使用该api[2]

使用Rust开发命令行工具,后端
使用Rust开发命令行工具,后端

如请求 api.openweathermap.org/data/2.5/weather?q=Beijing&appid=your_key:

{
 "coord": {
  "lon"116.3972,
  "lat"39.9075
 },
 "weather": [{
  "id"803,
  "main""Clouds",
  "description""broken clouds",
  "icon""04d"
 }],
 "base""stations",
 "main": {
  "temp"293.35,
  "feels_like"292.34,
  "temp_min"291.09,
  "temp_max"294.13,
  "pressure"1026,
  "humidity"35,
  "sea_level"1026,
  "grnd_level"1020
 },
 "visibility"10000,
 "wind": {
  "speed"4.86,
  "deg"344,
  "gust"7.43
 },
 "clouds": {
  "all"73
 },
 "dt"1634262993,
 "sys": {
  "type"2,
  "id"2021025,
  "country""CN",
  "sunrise"1634250256,
  "sunset"1634290552
 },
 "timezone"28800,
 "id"1816670,
 "name""Beijing",
 "cod"200
}

初始化项目&coding

使用cargo new rust_weather 初始化一个项目。

对于cargo.toml文件:

[package]
name = "rust_weather"
version = "0.1.0"
edition = "2018"

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

[dependencies]
structopt = "0.3.21"
exitfailure = "0.5.1"
serde = "1.0.114"
serde_json = "1.0.56"
serde_derive = "1.0.114"
reqwest = { version = "0.11", features = ["json"] }
tokio = { version = "1", features = ["full"] }

对于src/main.rs文件:

use exitfailure::ExitFailure;
use reqwest::Url;
use serde_derive::{Deserialize, Serialize};
use structopt::StructOpt;

#[derive(Serialize,Deserialize,Debug)]
struct W {
    coord: Coord,
    weather: Weather,
    base: String,
    main: Main,
}

impl W {
    async fn get(city: &String) -> Result<Self, ExitFailure> {
        let url = format!("https://api.openweathermap.org/data/2.5/weather?q={}&appid=40452068d845180226c3f289341974b7", city);
        // 转换为url
        let url = Url::parse(&*url)?;
        let resp = reqwest::get(url).await?.json::<W>().await?;
        Ok(resp)
    }
}

#[derive(Serialize,Deserialize,Debug)]
struct Coord {
    lon: f64,
    lat: f64,
}

#[derive(Serialize,Deserialize,Debug)]
struct Weather {
    details: Details,
}

#[derive(Serialize,Deserialize,Debug)]
struct Details {
    id: i32,
    main: String,
    description: String,
    icon: String,
}

#[derive(Serialize,Deserialize,Debug)]
struct Main {
    temp: f64,
    feels_like: f64,
    temp_min: f64,
    temp_max: f64,
    pressure: i32,
    humidity: i32,

}


#[derive(StructOpt)]
struct Input {
    city: String
}

#[tokio::main]
async fn main() -> Result<(), ExitFailure> {
    let input = Input::from_args();
    //println!("{}", input.city);


    let resp = W::get(&input.city).await?;

    println!("{} \n 天气: {} \n 当前温度: {} \n 最高温度: {} \n 最低温度: {} \n 湿度: {}", input.city, resp.weather.details.main, resp.main.temp, resp.main.temp_max, resp.main.temp_min, resp.main.humidity);

    //println!("Hello, world!");
    Ok(())
}


使用cargo run Beijing进行调试

直到能够准确输出预订结果,如下:

➜  rust_weather git:(master) ✗ cargo run Beijing
    Finished dev [unoptimized + debuginfo] target(s) in 0.13s
     Running `target/debug/rust_weather Beijing`
Beijing 
 天气: Clouds 
 当前温度: 293.35 
 最高温度: 294.13 
 最低温度: 291.09 
 湿度: 35

将二进制文件移动到系统PATH路径下

此时target/debug/rust_weather即想要的二进制文件,可将其复制到任意一个系统PATH路径下

echo $PATH

/opt/homebrew/opt/node@12/bin:/Users/fliter/.nvm/versions/node/v16.9.0/bin:/usr/local/Cellar/mysql@5.7/5.7.28/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/Users/fliter/.cargo/bin:/usr/local/go/bin:/Users/fliter/go/bin:/Users/fliter/Downloads/:/bin:/usr/local/MongoDB/bin:/usr/local/Cellar/ffmpeg/4.3.1/bin:/Users/fliter/.cargo/bin

还可以重命名,如改为weather,复制到usr/local/bin下,而后source .zshrc


在任意命令行窗口下,执行 weather Binzhou:

Binzhou 
 天气: Rain 
 当前温度: 291.63 
 最高温度: 291.63 
 最低温度: 291.63 
 湿度: 67

参考自原子之音[3]

参考资料

[1]

用rust打造实时天气命令行工具: https://www.bilibili.com/video/BV1eL411b7EL

[2]

该api: https://openweathermap.org/api

[3]

原子之音: https://www.bilibili.com/video/BV1eL411b7EL

本文由 mdnice 多平台发布文章来源地址https://www.toymoban.com/news/detail-677853.html

到了这里,关于使用Rust开发命令行工具的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用代码生成工具快速开发应用-结合后端Web API提供接口和前端页面快速生成,实现通用的业务编码规则管理

    在前面随笔《在Winform应用中增加通用的业务编码规则生成》,我介绍了基于Winform和WPF的一个通用的业务编码规则的管理功能,本篇随笔介绍基于后端Web API接口,实现快速的Vue3+ElementPlus前端界面的开发整合,同样是基于代码生成工具实现快速的前端代码的生成处理。 在前面

    2024年02月04日
    浏览(48)
  • 【Rust日报】2023-06-06 motus 一个非常方便的命令行密码生成工具

    motus 一个非常简单的命令行密码生成工具 Motus是一个命令行应用,帮你轻松生成安全密码。 它的用户界面非常简单、优雅,跟 1Password 的密码生成器一样,让你感觉很舒服。Motus 默认会把生成的密码复制到你的剪贴板,用起来非常方便。 ReadMore: https://github.com/oleiade/motus Loo

    2024年02月08日
    浏览(76)
  • 【npm link】Node命令中的npm link命令的使用,还有CLI全局命令的使用,开发命令行工具必不可少的部分

    😁 作者简介:一名大四的学生,致力学习前端开发技术 ⭐️个人主页:夜宵饽饽的主页 ❔ 系列专栏:NodeJs 👐学习格言:成功不是终点,失败也并非末日,最重要的是继续前进的勇气 ​🔥​前言: 本文是关于Node命令中的npm link命令的详细使用,还有脚手架的背后原理,如

    2024年01月16日
    浏览(46)
  • 后端开发常用工具及其官网

    ​JAVA 开发工具:     工具:Eclipse     官网:https://www.eclipse.org/     工具:JetBrains IntellIDEA     官网:https://www.jetbrains.com/idea/  JAVA 反编译查看工具:      工具:jd-gui     官网:http://java-decompiler.github.io/  jar包打开工具:       工具:7-zip      官网:7-Z

    2024年02月11日
    浏览(65)
  • mac升级Monterey12.6之后出现 git命令需要使用命令行开发者工具 安装选项的问题处理

    今天刚升级了最新的系统,升级后发现idea、webstorm等等需要git的全部无法使用了,总是弹出git命令需要使用命令行开发工具,提示让我安装,故以为是版本升级原因,那就安装吧,安装之后打开idea,又提示要安装,这。。。  好吧我再安装一次,然后我修改项目代码后,准备

    2024年02月11日
    浏览(45)
  • 后端项目开发:工具类封装(序列化、反射)

    根据《阿里巴巴开发规范》,包名使用单数,类名可以使用复数。 所以generic-common创建util包和utils工具类 很多时候我们需要将接收到的json数据转换为对象,或者将对象转为json存储。这时候我们需要编写用于json转换的工具类。 新建util目录,再创建JacksonUtils类

    2024年02月11日
    浏览(38)
  • 阿里巴巴常用的12个后端开发工具

    Arthas是一款用于Java应用程序的在线诊断工具,由阿里巴巴于2018年9月开源。 典型场景: 您不知道从中加载类的特定JAR包。 您想弄清楚为什么您的系统会抛出各种与类相关的异常。 您不知道为什么修改后的代码无法执行。您不记得是否已提交更改。您不确定您是否使用正确的

    2024年02月12日
    浏览(42)
  • Git 管理工具 SourceTree 的使用(上手简单,不熟悉git命令的开发者必用)

    目录 一、SourceTree 概述 二、SourceTree 使用方法 1. 克隆 Git 仓库至本地 2. 推送本地的文件至远程仓库 3. 创建/切换/合并分支 4. 版本回退         SourceTree 是一款免费的 Git 和 Hg 客户端管理工具,支持 Git 项目的创建、克隆、提交、push、pull 和合并等操作。它拥有一个精美简

    2024年02月01日
    浏览(54)
  • Rust桌面应用开发工具-----Tauri(Yew UI 模版)安装与测试

    最近在学习rust,想要了解一下关于rust在桌面应用开发方面的工具。。。 已经安装好了Rust ,我的测试环境是在 macos 系统进行的。其他系统注意阅读官方的操作文档。 MacOs系统环境准备 关于C的开发依赖 更新一下rust 运行之后会有如下的一些提示 根据提示运行测试一下 有个报

    2024年02月16日
    浏览(43)
  • 后端开发从小白到大佬之Linux的命令(一):nohup,详解底层!!!

    在 Linux 中, nohup 命令 用于在后台运行命令 , 并将其输出重定向到一个文件中,即使退出终端或关闭会话,该命令也能够持久的运行。 通常情况下,我们使用 nohup 命令来运行那些需要较长时间才能完成的任务,或者需要在长时间运行的过程中保持连接的任务,我们java的j

    2024年02月22日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包