مقدمه
Cargo به گونهای طراحی شده که قابل گسترش باشد. شما میتوانید با افزودن ابزارهای خط فرمان
دیگر که از یک قرارداد نامگذاری خاص پیروی میکنند، دستورات سفارشی خود را به Cargo اضافه
کنید. اگر یک فایل اجرایی در PATH سیستم شما با نام cargo-something وجود داشته باشد، شما
میتوانید آن را به صورت یک زیرفرمان (subcommand) و با cargo something اجرا کنید. این یک راه
عالی برای یکپارچهسازی اسکریپتها و ابزارهای دیگر با گردش کار استاندارد Cargo است.
نحوه عملکرد دستورات سفارشی
وقتی شما دستور cargo something را اجرا میکنید، Cargo ابتدا بررسی میکند که آیا
something یکی از دستورات داخلی خودش است یا خیر. اگر نباشد، در PATH سیستم به دنبال یک فایل
اجرایی به نام cargo-something میگردد. اگر آن را پیدا کند، آن فایل اجرایی را اجرا کرده و تمام
آرگومانهایی که بعد از something آمدهاند را به آن پاس میدهد.
یک مثال ساده
بیایید یک دستور سفارشی ساده بسازیم. شما میتوانید این کار را با هر زبانی انجام دهید، اما استفاده
از bash برای یک مثال ساده کافی است. یک فایل به نام cargo-hello در پوشه ~/.cargo/bin بسازید
(این پوشه باید از قبل در PATH شما باشد).
~/.cargo/bin/cargo-hello
#!/bin/sh
echo "Hello from a custom command!"
فراموش نکنید که این فایل را با chmod +x ~/.cargo/bin/cargo-hello قابل اجرا کنید. حالا
میتوانید از هر جایی در ترمینال خود، دستور زیر را اجرا کنید:
$ cargo hello
Hello from a custom command!
Cargo به صورت خودکار فایل cargo-hello را پیدا و اجرا کرد.
مثالهای کاربردی
بسیاری از ابزارهای مفید در اکوسیستم Rust به عنوان دستورات سفارشی Cargo ارائه میشوند. شما
میتوانید آنها را با cargo install نصب کرده و سپس به صورت یکپارچه با Cargo از آنها
استفاده کنید.
- cargo-edit: ابزاری برای مدیریت وابستگیهای پروژه از خط فرمان (مانند cargo add یا
cargo rm).
- cargo-watch: ابزاری که تغییرات در فایلهای پروژه شما را مشاهده کرده و به صورت
خودکار دستوراتی مانند cargo check یا cargo test را اجرا میکند.
- cargo-audit: وابستگیهای پروژه شما را برای یافتن آسیبپذیریهای امنیتی شناختهشده
بررسی میکند.
برای نصب هر کدام از اینها، کافیست دستور cargo install <crate-name> را اجرا کنید. برای مثال:
$ cargo install cargo-edit
پس از نصب، میتوانید از دستور cargo add serde --features derive برای افزودن serde به
وابستگیهای پروژه خود استفاده کنید، بدون اینکه نیاز به ویرایش دستی فایل Cargo.toml داشته
باشید.
در این درس با قابلیت گسترش Cargo از طریق دستورات سفارشی آشنا شدیم. این مکانیزم ساده به
جامعه Rust اجازه داده تا ابزارهای بسیار قدرتمند و مفیدی را بسازند که به صورت یکپارچه با گردش کار
استاندارد Cargo کار میکنند. با این درس، فصل «مطالب بیشتر در مورد Cargo و crates.io» به
پایان میرسد. ما در این فصل با پروفایلهای بیلد، انتشار پکیج، فضاهای کاری و دستورات سفارشی آشنا
شدیم و اکنون درک عمیقتری از قدرت Cargo به عنوان مدیر پروژه داریم. در فصل بعدی، به سراغ
یکی از مفاهیم پیشرفته و قدرتمند Rust، یعنی «اشارهگرهای هوشمند» (Smart Pointers) خواهیم رفت.