ไทย
สร้าง CLI ที่น่าสนใจโดยใช้ Rust
- ภาษาที่เขียน:ภาษาเกาหลี
- •
- ประเทศอ้างอิง:ทุกประเทศ
- •
- เทคโนโลยีสารสนเทศ
สรุปโดย AI ของ durumis
- Rust เป็นภาษาที่เหมาะสมสำหรับการเขียน CLI และได้สร้างโปรแกรม CLI ง่ายๆ ที่มีฟังก์ชันการเข้าสู่ระบบและออกจากระบบโดยใช้ライブรารี่ clap และ ratatui
- ได้กำหนดตัวเลือกและคำสั่งย่อยที่หลากหลายผ่าน clap และสร้างหน้าต่างป้อนข้อมูลแบบโต้ตอบด้วย ratatui เพิ่มความสะดวกสบายและความปลอดภัย
- ณ วันที่ 18 เมษายน 2024 ได้แนะนำวิธีการเขียนโปรแกรม CLI ที่สะดวกด้วย Rust
ของผมคือโดยปกติแล้วภาษาที่ดีที่สุดในการเขียน CLI ที่แข็งแกร่งและง่ายที่สุดคือ Rust
เพราะความสามารถในการขยายแมโครที่ยอดเยี่ยม คุณจึงสามารถกำหนดข้อจำกัดและการตรวจสอบทั้งหมดในระดับโครงสร้าง และคุณสมบัติของประเภทนั้นได้อย่างเต็มรูปแบบ
ในโพสต์นี้ ฉันจะสร้างตัวยอย่างโปรแกรม CLI ที่ง่ายๆ โดยใช้ clap และ ratatui เพื่อจัดการการล็อกอินและออกจากระบบครั้งเดียว จากนั้นฉันจะแนะนำวิธีการเขียนและวิธีใช้งานโดยคร่าวๆ
การกำหนดค่า clap ขั้นพื้นฐาน
ขั้นแรก เพิ่มสิ่งที่ต้องพึ่งพาต่อไปนี้ลงในสี่สิ่ง
```javascript atty = { version = "0.2.14", optional = true } structopt = { version = "0.3.18", optional = true } clap = { version = "4.4.18", features = ["derive"] } serde = { version = "1", features = ["derive"] }
สองอันแรกคือสำหรับการแมปคำสั่ง cargo ส่วนอีกสองอันคือสำหรับการแยกวิเคราะห์คำสั่ง clap
ตอนนี้เพิ่มรหัสทีละบรรทัดกันเลย
ขั้นแรก กำหนดประเภทคำสั่งระดับสูงสุด แล้วใส่เซิร์ฟเวอร์คำสั่งย่อยเข้าไป
ในเซิร์ฟเวอร์คำสั่งย่อย SubCommand จะมีคำสั่งล็อกอินและออกจากระบบที่จะกำหนดในอีกไม่นาน
จากนั้นกำหนดค่าคำสั่งข้างต้นลงในโครงสร้างพื้นฐานก็เรียบร้อย
โปรแกรมที่สร้างขึ้นด้วยวิธีนี้สามารถรันผ่าน cargo run หรือ
ติดตั้งผ่าน cargo install จากนั้นจึงรันได้
กำหนดเซิร์ฟเวอร์คำสั่งย่อย
ตอนนี้มาเริ่มกำหนดค่าเซิร์ฟเวอร์คำสั่งย่อยทีละเซิร์ฟเวอร์กัน
Login และ Logout จะถูกลบออกเป็นคำสั่งย่อยแยกต่างหาก
สร้างไฟล์แยกต่างหากก่อนเพื่อกำหนดค่าคำสั่ง login
กำหนดค่าองค์ประกอบแฟล็กผ่านวัตถุ Option ภายใน
short ระบุว่าจะสร้างทางลัด เช่น -i หรือไม่ long ระบุว่าจะสร้างข้อความเต็ม เช่น --id หรือไม่ ตามธรรมชาติแล้ว help คือส่วนช่วยเหลือ
ในการทำให้แฟล็กเหล่านั้นเป็นองค์ประกอบเสริม คุณจะต้องป้อนประเภทเป็น Option หรือกำหนดคุณสมบัติ default_value
จากนั้นจึงเพิ่มเข้าไปในตัวแปรย่อยของวัตถุคำสั่งสูงสุดแบบ variant
คราวนี้เป็นคำสั่ง logout คำสั่งนี้ทำได้ง่ายกว่า
เนื่องจากไม่มีตัวเลือกที่จะลดลง
ลงทะเบียนเป็นคำสั่งย่อยของคำสั่งสูงสุดเช่นเดิม
ในการดำเนินการก็จะแบ่งประเภทเป็น enum แล้วคุณก็แค่แมตช์รูปแบบอย่างเหมาะสม
แล้วรันก่อน
คุณจะเห็นว่ามีการเพิ่มลงในรายการคำสั่งย่อยแล้ว
การดำเนินการก็ใช้ได้ดีเช่นกัน หากคุณลืมแฟล็กที่จำเป็น จะมีเสียงบ่นว่าไม่มี
หากคุณส่งผ่านข้อมูล ก็จะทำงานได้ดี แต่อย่างไรก็ตามยังไม่มีการกระทำใดๆ
แบ่งแยกและใช้แอคชัน
ตอนนี้มาเพิ่มส่วน実装ที่เหมาะสมกันเถอะ ในกรณีของฉัน ฉันชอบแยกตรรกะเป็นไฟล์สำหรับสถานการณ์เช่นนี้มากกว่า เนื่องจากการรวมเข้าด้วยกันจะทำให้ภาพดูรกเกินไปและสกปรก
สร้างโมดูลแอคชันและสร้างไฟล์สำหรับการกระทำของคำสั่งย่อยแต่ละรายการ
ฟังก์ชันแอคชันแต่ละอย่างจะรับค่าอ็อปชันของแต่ละคำสั่งย่อยเป็นอาร์กิวเมนต์
จากนั้นจึงถ่ายโอนการดำเนินการของจุดเชื่อมต่อทั้งหมดไปยัง run
ดูดีไม่เลวเลยใช่มั้ย
ตอนนี้เตรียมการเกือบเสร็จแล้ว เรามาใช้ตรรกะที่น่าเชื่อถือกันเลย
การล็อกอินถูกกำหนดให้ส่งออกไปยังไฟล์ credentials โดยอิงตามแฟล็กที่ได้รับ
การออกจากระบบจะลบไฟล์ credential ที่สร้างขึ้น
ดังนั้นหากคุณพยายามล็อกอิน
จะมีการสร้างตามที่ป้อนเข้าไป
หากคุณพยายามออกจากระบบ
จะมีการลบตามที่คาดไว้
ใช้ TUI เพื่อการสื่อสารแบบอินเทอร์แอคทีฟ
อย่างไรก็ตาม หากแฟล็กที่จำเป็นมีเพียงหนึ่งหรือสองแฟล็กก็ไม่มีปัญหา แต่หากมีแฟล็กมากเกินไป ก็ค่อนข้างจะลำบากที่จะต้องค้นหาและป้อนแฟล็กต่างๆ
หรือการแสดงรหัสผ่านบนหน้าจอโดยตรงอาจเป็นปัญหาเกี่ยวกับความปลอดภัยก็เป็นได้
ในกรณีเช่นนี้ การใช้ TUI เพื่อความสะดวกหรือความปลอดภัยอาจเป็นทางเลือกที่ดี
ใช้ ratatui ซึ่งเป็นสภาพแวดล้อม TUI ที่มีประโยชน์มากของ Rust เพื่อสร้างกล่องป้อนข้อมูลแบบโต้ตอบที่มีการปิดกั้นรหัสผ่านด้วยซ้ำ