Module & Cargo di Rust
Saat project mulai besar, kamu butuh cara mengorganisir kode menjadi file-file terpisah dan mengelola dependency. Rust melakukannya lewat modules dan Cargo.
mod — Mendefinisikan Module
// src/main.rs
mod matematika {
pub fn tambah(a: i32, b: i32) -> i32 {
a + b
}
fn rahasia() -> i32 { 42 } // private by default
}
fn main() {
println!("{}", matematika::tambah(2, 3));
// matematika::rahasia(); // ERROR! private
}
pub — Visibility
Semua item di Rust private secara default. Gunakan pub untuk membuka akses:
pub fn— fungsi publicpub struct— struct public (field tetap private kecuali ditandaipub)pub mod— module public
pub struct User {
pub nama: String, // public field
password: String, // private field
}
use — Bring into Scope
use std::collections::HashMap;
use std::io::{self, Write}; // io dan io::Write
fn main() {
let mut map: HashMap<&str, i32> = HashMap::new();
map.insert("a", 1);
}
Module Tree & File Structure
proyek/
├── Cargo.toml
└── src/
├── main.rs ← entry point (binary) atau lib.rs (library)
├── matematika.rs ← module `matematika`
└── utils/
├── mod.rs ← module `utils`
└── format.rs ← sub-module `utils::format`
Di main.rs, deklarasikan: mod matematika; dan mod utils; — Rust otomatis mencari file-nya.
Cargo.toml — Manifest File
[package]
name = "proyek_saya"
version = "0.1.0"
edition = "2021"
[dependencies]
serde = { version = "1.0", features = ["derive"] }
tokio = { version = "1", features = ["full"] }
reqwest = "0.11"
[dev-dependencies]
criterion = "0.5"
Perintah Cargo
| Perintah | Fungsi |
|---|---|
cargo new proyek | Buat project baru |
cargo build | Compile (debug) |
cargo build --release | Compile optimized |
cargo run | Build + run |
cargo test | Jalankan semua tests |
cargo check | Type-check tanpa build full |
cargo add serde | Tambah dependency |
cargo doc --open | Generate dan buka dokumentasi |
crates.io — Package Registry
crates.io adalah registry official untuk crates (library) Rust — mirip npm untuk JavaScript atau PyPI untuk Python. Semua dependency di [dependencies] diambil dari sini secara default.
Contoh: Menggunakan External Crate
// Cargo.toml
// [dependencies]
// serde = { version = "1.0", features = ["derive"] }
use serde::Serialize;
#[derive(Serialize)]
struct User {
nama: String,
umur: u32,
}