Rust अनुप्रयोगों का कॉन्फ़िगरेशन: लचीली सेटिंग्स के लिए `config` लाइब्रेरी

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Rust में कॉन्फ़िगरेशन प्रबंधन के लिए config लाइब्रेरी

\n\n

Rust में अनुप्रयोग विकसित करते समय, सेटिंग्स का लचीला प्रबंधन एक महत्वपूर्ण कार्य है। config लाइब्रेरी (क्रेट config) कॉन्फ़िगरेशन फ़ाइलों, पर्यावरण चर और अंतर्निहित मानों के साथ काम करने का एक शक्तिशाली और सुविधाजनक तरीका प्रदान करती है। यह TOML, JSON, YAML, HJSON, INI प्रारूपों का समर्थन करती है और प्राथमिकताओं के साथ कई स्रोतों से सेटिंग्स को संयोजित करने की अनुमति देती है।

\n\n

स्थापना

\n

Cargo.toml में निर्भरता जोड़ें:

\n
[dependencies]\nconfig = "0.14"\nserde = { version = "1.0", features = ["derive"] }\n
\n\n

मूल उपयोग

\n

एक सरल कॉन्फ़िगरेशन फ़ाइल Settings.toml बनाएं:

\n
[server]\nhost = "127.0.0.1"\nport = 8080\n\n[database]\nurl = "postgres://user:pass@localhost/mydb"\npool_size = 10\n
\n\n

अब इसे Rust अनुप्रयोग में लोड करें:

\n
use config::{Config, File, Environment};\nuse serde::Deserialize;\n\n#[derive(Debug, Deserialize)]\nstruct ServerConfig {\n    host: String,\n    port: u16,\n}\n\n#[derive(Debug, Deserialize)]\nstruct DatabaseConfig {\n    url: String,\n    pool_size: u32,\n}\n\n#[derive(Debug, Deserialize)]\nstruct AppConfig {\n    server: ServerConfig,\n    database: DatabaseConfig,\n}\n\nfn main() -> Result<(), config::ConfigError> {\n    let settings = Config::builder()\n        .add_source(File::with_name("Settings"))\n        .add_source(Environment::with_prefix("APP"))\n        .build()?;\n\n    let app_config: AppConfig = settings.try_deserialize()?;\n    \n    println!("सर्वर: {}:{}", app_config.server.host, app_config.server.port);\n    println!("डेटाबेस: {}", app_config.database.url);\n    \n    Ok(())\n}\n
\n\n

एकाधिक प्रारूपों के लिए समर्थन

\n

लाइब्रेरी फ़ाइल एक्सटेंशन द्वारा स्वचालित रूप से प्रारूप का पता लगाती है। JSON के साथ उदाहरण:

\n
let settings = Config::builder()\n    .add_source(File::with_name("config.json"))\n    .add_source(File::with_name("override.yaml").required(false))\n    .build()?;\n
\n\n

पर्यावरण चर

\n

फ़ाइलों को बदले बिना सेटिंग्स को ओवरराइड करने के लिए पर्यावरण चर के लिए उपसर्ग का उपयोग करें:

\n
// चलाएं: APP_SERVER__PORT=9090 cargo run\nlet settings = Config::builder()\n    .add_source(File::with_name("Settings"))\n    .add_source(Environment::with_prefix("APP").separator("__"))\n    .build()?;\n
\n\n

नेस्टेड सेटिंग्स और ऐरे

\n

पदानुक्रमिक संरचनाएं समर्थित हैं:

\n
#[derive(Debug, Deserialize)]\nstruct AppConfig {\n    features: Vec<String>,\n    logging: LoggingConfig,\n}\n\n#[derive(Debug, Deserialize)]\nstruct LoggingConfig {\n    level: String,\n    file: Option<String>,\n}\n
\n\n

ऐरे के साथ TOML उदाहरण:

\n
features = ["auth", "caching", "metrics"]\n\n[logging]\nlevel = "info"\nfile = "/var/log/app.log"\n
\n\n

कॉन्फ़िगरेशन का संयोजन

\n

लाइब्रेरी विभिन्न स्रोतों से सेटिंग्स को ओवरले करने की अनुमति देती है। बाद के स्रोतों की उच्च प्राथमिकता होती है:

\n
let settings = Config::builder()\n    .add_source(File::with_name("default"))      // आधार सेटिंग्स\n    .add_source(File::with_name("production").required(false)) // उत्पादन\n    .add_source(Environment::with_prefix("APP")) // पर्यावरण चर\n    .build()?;\n
\n\n

त्रुटि प्रबंधन और डिफ़ॉल्ट मान

\n

फ़ॉलबैक के साथ अलग-अलग मान प्राप्त करने के लिए get() का उपयोग करें:

\n
let port: u16 = settings.get("server.port").unwrap_or(8080);\nlet debug: bool = settings.get("debug").unwrap_or(false);\n
\n\n

सेटिंग्स तक गतिशील पहुंच

\n

यदि कॉन्फ़िगरेशन संरचना पहले से ज्ञात नहीं है, तो गतिशील पहुंच का उपयोग करें:

\n
let val = settings.get_string("database.url")?;\nlet timeout = settings.get_int("timeout")                    

अनुशंसाएँ