Rust में कॉन्फ़िगरेशन प्रबंधन के लिए config लाइब्रेरी
\n\nRust में अनुप्रयोग विकसित करते समय, सेटिंग्स का लचीला प्रबंधन एक महत्वपूर्ण कार्य है। config लाइब्रेरी (क्रेट config) कॉन्फ़िगरेशन फ़ाइलों, पर्यावरण चर और अंतर्निहित मानों के साथ काम करने का एक शक्तिशाली और सुविधाजनक तरीका प्रदान करती है। यह TOML, JSON, YAML, HJSON, INI प्रारूपों का समर्थन करती है और प्राथमिकताओं के साथ कई स्रोतों से सेटिंग्स को संयोजित करने की अनुमति देती है।
स्थापना
\nCargo.toml में निर्भरता जोड़ें:
[dependencies]\nconfig = "0.14"\nserde = { version = "1.0", features = ["derive"] }\n\n\nमूल उपयोग
\nएक सरल कॉन्फ़िगरेशन फ़ाइल Settings.toml बनाएं:
[server]\nhost = "127.0.0.1"\nport = 8080\n\n[database]\nurl = "postgres://user:pass@localhost/mydb"\npool_size = 10\n\n\nअब इसे Rust अनुप्रयोग में लोड करें:
\nuse 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 के साथ उदाहरण:
\nlet 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 उदाहरण:
\nfeatures = ["auth", "caching", "metrics"]\n\n[logging]\nlevel = "info"\nfile = "/var/log/app.log"\n\n\nकॉन्फ़िगरेशन का संयोजन
\nलाइब्रेरी विभिन्न स्रोतों से सेटिंग्स को ओवरले करने की अनुमति देती है। बाद के स्रोतों की उच्च प्राथमिकता होती है:
\nlet 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() का उपयोग करें:
let port: u16 = settings.get("server.port").unwrap_or(8080);\nlet debug: bool = settings.get("debug").unwrap_or(false);\n\n\nसेटिंग्स तक गतिशील पहुंच
\nयदि कॉन्फ़िगरेशन संरचना पहले से ज्ञात नहीं है, तो गतिशील पहुंच का उपयोग करें:
\nlet val = settings.get_string("database.url")?;\nlet timeout = settings.get_int("timeout") पुस्तकालय में भी
Rust में config का पूरा गाइड: उदाहरण और टिप्स
Swift अनुप्रयोगों का कॉन्फ़िगरेशन: SwiftyConfig लाइब्रेरी
Kotlin में इमेज प्रोसेसिंग: ImageMagick लाइब्रेरी के साथ resize और crop