Anyhow का परिचय: यह क्या है और क्यों ज़रूरी है
Anyhow Rust इकोसिस्टम में एरर (त्रुटि) हैंडलिंग के लिए सबसे लोकप्रिय लाइब्रेरीज़ में से एक है। यह एरर को संभालने का एक सरल, लचीला और सुविधाजनक तरीका प्रदान करता है, खासकर उन स्थितियों में जहाँ आपको सख्त एरर टाइपिंग की ज़रूरत नहीं है या जब आप प्रोटोटाइप, स्क्रिप्ट, CLI-यूटिलिटी या ऐसे एप्लिकेशन लिख रहे हैं जहाँ डेवलपमेंट की गति महत्वपूर्ण है, न कि हर एरर वेरिएंट की आदर्श हैंडलिंग।
Rust की स्टैंडर्ड लाइब्रेरी में एरर हैंडलिंग Result<T, E> टाइप के आसपास बनी है, जहाँ E एरर का टाइप है। हालांकि, बड़े प्रोजेक्ट्स में एरर टाइप अलग-अलग हो सकते हैं: std::io::Error, serde_json::Error, reqwest::Error आदि। इन्हें मैन्युअली जोड़ना एक मुश्किल काम है। Anyhow इस समस्या को हल करता है, एक सार्वभौमिक anyhow::Error टाइप प्रदान करके जो std::error::Error ट्रेट को इम्प्लीमेंट करने वाली किसी भी एरर को स्टोर कर सकता है।
Anyhow के मुख्य लाभ:
- सरलता: न्यूनतम बॉयलरप्लेट कोड। हर मॉड्यूल के लिए अलग एरर टाइप बनाने की ज़रूरत नहीं।
- लचीलापन: कोई भी एरर अपने आप
anyhow::Errorमें कन्वर्ट हो जाती है। - कॉन्टेक्स्ट: आप
.context()मेथड का उपयोग करके एरर में अतिरिक्त जानकारी जोड़ सकते हैं। - सुविधाजनक मैक्रोज़:
bail!औरensure!मैक्रोज़ जल्दी से एरर रिटर्न करने में मदद करते हैं। - संगतता:
Resultरिटर्न करने वाली किसी भी लाइब्रेरी के साथ काम करता है।
Anyhow लाइब्रेरीज़ के लिए नहीं है (वहाँ thiserror बेहतर है), लेकिन एप्लिकेशन, बाइनरी और टेस्ट के लिए यह आदर्श है।
इंस्टॉलेशन
Anyhow Rust के लिए एक लाइब्रेरी है, इसलिए इसे cargo पैकेज मैनेजर के ज़रिए इंस्टॉल किया जाता है। अपने Cargo.toml फ़ाइल में निम्नलिखित लाइन जोड़ें:
[dependencies]
anyhow = "1.0"
इसके बाद cargo build कमांड चलाएँ, और लाइब्रेरी डाउनलोड और कंपाइल हो जाएगी। अगर आप Rust 2021 edition या उससे नया उपयोग कर रहे हैं, तो किसी अतिरिक्त सेटिंग की ज़रूरत नहीं है।
कोड में Anyhow का उपयोग करने के लिए, इसे इम्पोर्ट करें:
use anyhow::{Result, anyhow, bail, Context};
त्वरित शुरुआत: पहला उदाहरण
चलिए एक सरल प्रोग्राम लिखते हैं जो फ़ाइल पढ़ता है, उसे JSON के रूप में पार्स करता है और परिणाम प्रिंट करता है। अगर किसी भी चरण में एरर आती है, तो हम उसे ऊपर रिटर्न कर देंगे।
use anyhow::Result;
use std::fs;
fn main() -> Result<()> {
// फ़ाइल की सामग्री पढ़ें
let data = fs::read_to_string("config.json")?;
// JSON के रूप में पार्स करें (serde_json का उपयोग करें)
let config: serde_json::Value = serde_json::from_str(&data)?;
println!("कॉन्फ़िगरेशन: {}", config);
Ok(())
}
? ऑपरेटर पर ध्यान दें - यह एरर प्रसार ऑपरेटर है। अगर read_to_string या from_str एरर रिटर्न करते हैं, तो वह अपने आप anyhow::Error में बदल जाती है और फ़ंक्शन इस एरर के साथ समाप्त हो जाता है। बहुत सरल और सुरुचिपूर्ण।
Anyhow के मुख्य तरीके और फ़ंक्शन
नीचे Anyhow लाइब्रेरी के 10 प्रमुख तरीके और फ़ंक्शन विस्तृत विवरण और उदाहरणों के साथ दिए गए हैं।
1. anyhow!() — मनमानी एरर बनाना
क्या करता है: anyhow! मैक्रो स्ट्रिंग या फ़ॉर्मेटेड मैसेज से anyhow::Error टाइप की एक नई एरर बनाता है। यह format! का एरर वाला संस्करण है।
पैरामीटर: फ़ॉर्मेटिंग के साथ स्ट्रिंग (जैसे format!) या कोई भी टाइप जो Display इम्प्लीमेंट करता है।
उदाहरण:
use anyhow::{anyhow, Result};
fn validate_age(age: i32) -> Result<()> {
if age < 0 {
return Err(anyhow!("उम्र नकारात्मक नहीं हो सकती: {}", age));
}
Ok(())
} पुस्तकालय में भी
जावा के लिए ORM: Hibernate, MyBatis, JPA और Spring Data की तुलना
PHP में तिथियों के साथ काम करना: पुस्तकालयों और उपकरणों का अवलोकन
Redis Java क्लाइंट: Jedis, Lettuce और Redisson - पूरी गाइड
Carter C# (.NET) पूर्ण गाइड: उदाहरणों के साथ