rust

分类下相关文章

在 windows 上使用 rust 调用系统弹窗

想在 Windows 上执行一段 rust 的处理程序,处理完成后,能弹窗提醒任务完成。 参考 Windows 官方的一个示例: https://learn.microsoft.com/en-us/windows/dev-environment/rust/rss-reader-rust-for-windows#showing-a-message-box 创建项目 cargo new rust_txt 依赖 Cargo.toml [package] name = "rust_txt" version = "0.1.0" edition = "2 ...

阅读全文...

Windows 上新建一个 Rust 项目,并使用 VS Code 进行开发

新建 Rust 项目 例如,新建一个名为 rust_txt 的项目 $ cd /mnt/d/work/ $ cargo.exe new rust_txt Created binary (application) `rust_txt` package 这样项目就新建好了。 查看目录 $ cd rust_txt $ ls Cargo.toml src $ tree . ├── Cargo.toml └── src └── main.rs 运行代码 $ cargo.exe run Finished dev [unoptimized + debuginfo] ta ...

阅读全文...

区分 Windows 与 WSL Ubuntu 中的 Rust 开发环境

突然想在 windows 中写个小的 GUI 工具,但是我又想在 WSL 的 VIM 中开发。 如果同时在 Windows 中及 Windows 的 Linux 子系统 (WSL) 中安装了 Rust,需要区分开。 $ cargo --version cargo 1.78.0 (54d8815d0 2024-03-26) $ cargo.exe --version cargo 1.77.1 (e52e36006 2024-03-26) 带 .exe 的是 windows 环境中安装的 Rust 不带 .exe 的是 WSL 环境中的 Rust ...

阅读全文...

魔幻的 rust enum 枚举类型

在看一段 github 上文本解析库的 rust 代码时,看到这样一个 enum 的定义: #[derive(Debug)] pub enum Line { Comment(String), Metadata(String, String), Entry(DictEntry<String>), Empty, Incorrect, } 我整个人直接蒙了,为啥每个 item 后面还能备注类型?(这个时候我还没联想到 Option) 早上, 上班路上翻了一下 rust 的官方文档,找到了答案 (比翻螃蟹书方便多了)。例如一个 IP 地址的存储结构 ...

阅读全文...

rust 项目中 mod.rs 文件的作用

在 Rust Loco 项目中,会看到 models 及 controllers 目录下都有一个 mod.rs 文件。 查了一下,这个 mod 即 module (模块) 的简写。 mod.rs 说明,这个目录下包含一堆子模块。每个子模块的名称就是每个文件的名称。 例如,看看 loco 项目的 controllers 及 models 的代码示例: 目录结构 > tree src/controllers/ src/controllers/ ├── auth.rs ├── hello.rs ├── mod.rs ├── notes.rs └── user.rs > tree src ...

阅读全文...

rust web 框架 Loco 新建一个 HTML 页面

虽然 Loco 主推的是前后端分离的方式写页面,但是我还是喜欢后端渲染的 HTML 页面。 因为我的使用场景,大部分不适用前后端分离: 后端渲染的页面更 SEO 友好 页面需要多语言支持,而前端实现并不合适。例如如果支持 10 门语言,总不能一次加载所有语言吧。 前端技术更新过快,而且毫无意义。不想耗费过多的时间去跟进。 言归正传。 实际上 loco 官方文档中介绍 HTML template view 还是相对简单,要了解 view 的全面可以参考 loco 的一个 demo: https://github.com/loco-rs/loco/blob/master/examples/de ...

阅读全文...

rust web 框架 loco 命令大全

loco 框架的命令非常强大,完全可以媲美 laravel。 常用命令 新建项目: loco new 启动服务:cargo loco start 查看所有路由:cargo loco routes 主要命令 > cargo loco Finished dev [unoptimized + debuginfo] target(s) in 16.27s Running `target/debug/loco_tool-cli` The one-person framework for Rust Usage: loco_tool-cli [OPTIONS] <COMMAND> ...

阅读全文...

rust web 框架 loco 的后端 HTML 模板

loco 框架目前的文档还是有点简陋,想通过直接看文档来上手,不太现实。 还是需要自己结合代码去查看三方的依赖库的文档。 目录结构 注意,后台模板及相关的资源文件是在 assets 目录下。 而不是 frontend 目录下,frontend 是 vite 创建的纯前端部分 (前后端分离的方案, loco 的默认首页就是在 frontend 中)。 Loco SaaS 项目,初始化的 assets 目录结构: > tree assets/ assets/ ├── i18n │   ├── de-DE │   │   └── main.ftl │   ├── en-US │   │   ...

阅读全文...

rust web 框架 loco 安装

之前尝试了 rust 的 Axum 框架,并写了两个练手的小工具。但是感觉上还是太简陋了,跟 golang 的 gin 类似, 没有自带的 ORM 以及模板系统,对初学者非常不友好。 我需要的是一个类似 Laravel 这样的完善的框架,有自己的代码结构规范,以及各种内置功能。 恰好看到了 loco 这个框架,号称对标 Ruby on Rails 这个经典框架。 Loco is a Rails inspired web framework for Rust. 而且是基于 Axum 的封装。于是忍不住想尝试一下,顺便把之前写的小工具重构成基于 Loco 的。 安装 loco cargo in ...

阅读全文...

Windows 11 上通过国内源安装 Rust

下载 首先,从 Rust 官方网站下载 rustup-init.exe 64 位安装包。 https://www.rust-lang.org/tools/install 网络连接错误 但是直接点击 rustup-init.exe 进行安装,会报错。大意是网络无法连接。 这个跟之前在 Linux 上安装 rust 是一样的问题,被网址被国内和谐了。 info: profile set to 'default' info: default host triple is x86_64-pc-windows-msvc info: syncing channel updates for 'stable- ...

阅读全文...

rust 框架 loco 源码阅读:loco-cli 代码生成模版机制

主要是想了解一下 loco-cli 是如何通过命令行生成代码文件的。 因为我非常想基于 rust 来实现 android,或者 golang CRUD 之类的模板代码生成。特别是,对既有文件进行插入修改的策略。 逻辑代码 https://github.com/loco-rs/loco/blob/master/loco-cli/src/generate.rs 模板代码 以包含了 CRUD api 及 route 的 controller 模板为例: https://github.com/loco-rs/loco/blob/master/src/gen/templates/scaffold/api ...

阅读全文...

升级 rust 到最新版本

今天在安装 rust loco-cli 时,发现系统上的 rust 版本太低,无法安装相关依赖: package clap_derive v4.5.0 cannot be built because it requires rustc 1.74 or newer, while the currently active rustc version is 1.73.0 看了一下版本,确实是 1.73.0 版本。 $ cargo --version cargo 1.73.0 (9c4383fb5 2023-08-26) 升级命令 rustup update 执行之后,就能看到所有 rust ...

阅读全文...

Rust web 框架 axum (五): 每个功能独立一个文件

之前为了练手把所有的 Axum rust 代码都写在 main.rs 这一个主文件中。 随着功能的增多,发现几点不便: 代码行数过多,不方便查找指定功能的代码 不同功能的类似数据结构需要分别定义,为了避免重名,增加了功能名前缀,但是带来的影响是类型名过长,代码丑陋无比 新增功能时,复制/修改既有代码也不方便 目标 一个 Axum 项目中,有多个子功能,每个子功能在不同的文件中实现。 契机 正好在写枯燥无比的 Android 界面代码时,产生了一个小工具的需求, 即,将 Android 样式代码剥离出 styles.xml 文件,于是在写这个功能的时候, 就顺手将既有的 Axum 项目代码重 ...

阅读全文...

Rust web 框架 axum (四): 生产服务器环境使用 Nginx 部署 axum 服务

这个周末不算忙,总算可以把一直没有上线的 Rust Axum 写的在线小工具发布了。 基本上跟 Golang Gin 的发布流程类似,本地编译好,scp 到服务器上。 然后配置好 systemd, nginx reload 就可以了。 比较省事的地方是 axum 默认会把模板文件打包到二进制文件中,不需要像 golang gin 一样增加额外配置代码。 第一个 Rust 小工具 Rust Axum 小工具: 中文标点替换成对应的英文标点符号 网页地址: https://www.sunzhongwei.com/tools3/replace-chinese-punctuation 编译优化 如果不 ...

阅读全文...

Rust web 框架 axum (三): 使用 askama html 模板

askama 是什么 Askama implements a template rendering engine based on Jinja. It generates Rust code from your templates at compile time based on a user-defined struct to hold the template's context. askama 即一套模板系统,可以集成到 rust 项目中,并不局限于 axum 中,也不局限于 HTML,任何的模板使用场景都是可以的。 类似 golang 内置的模板系统,及 php laravel 中 ...

阅读全文...