写一个 Rust 小应用 pngme - 5. 拆分代码

142 阅读1分钟

在完成前面的步骤之后,就已经可以在 PNG 文件中编码隐藏信息、解码提取信息、删除指定数据块以及打印所有数据块信息。

此时项目结构是这样的:

image.png

我们可以通过以下步骤来使用这个小工具:

构建项目
cargo build --release
将可执行文件添加到系统路径(可选)
export PATH=$PATH:/path/to/your/project/target/release
使用方法
pngme encode <FILE_PATH> <CHUNK_TYPE> <MESSAGE> [--output <OUTPUT_FILE>]
pngme decode <FILE_PATH> <CHUNK_TYPE>
pngme remove <FILE_PATH> <CHUNK_TYPE>
pngme print <FILE_PATH>
示例
pngme encode input.png "HIDE" "Hello, World!" --output output.png
pngme decode output.png "HIDE"
pngme remove output.png "HIDE"

接下来,将上面的代码拆分为库和可执行文件:

 拆分代码为库和可执行文件

创建库项目

在项目根目录下创建一个库项目:

cargo new --lib pngme_lib

将核心逻辑(如 PngChunkChunkType 等)移动到 pngme_lib/src/lib.rs 中。

将现有的代码移动到 pngme_lib 目录中。你可以将 src 目录下的所有文件移动到 pngme_lib/src 目录中。

修改库的 Cargo.toml

在 pngme_lib/Cargo.toml 中,确保有正确的依赖项和库名称。

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

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

[dependencies]
anyhow = "1.0"
clap = { version = "4.3.23", features = ["derive", "std"] }
crc = "3.0"

[lib]
name = "pngme_lib"
path = "src/lib.rs"
创建可执行项目

在项目根目录下创建一个可执行项目:

cargo new --bin pngme_bin

将命令行参数解析和 main 函数逻辑保留在 pngme_bin/src/main.rs 中。

修改可执行项目的 Cargo.toml
[package]
name = "pngme_bin"
version = "0.1.0"
edition = "2021"

[dependencies]
pngme_lib = { path = "../pngme_lib" }
编写可执行代码

在 pngme_bin/src/main.rs 中,调用库中的功能。

最终的项目结构变成了:

image.png

运行项目

最后我们就可以使用 pngme_bin 的命令了。