在Rust中如何定義應(yīng)用配置-Config

應(yīng)用配置在應(yīng)用中是比較基礎(chǔ)的機(jī)制落午,本文以示例的方式店茶,講解在Rust語(yǔ)言中,如果實(shí)現(xiàn)一個(gè)可擴(kuò)展的配置類嵌赠。

  • 1塑荒、定義結(jié)構(gòu)體
    首先我們需要定義一個(gè)配置類結(jié)構(gòu)體,用于描述應(yīng)用中需要配置的配置項(xiàng)姜挺。
    #[derive(Debug, Clone)]
    pub struct Config<Flags>{
        pub host:String, 
        pub port:u32,
        pub flags:Flags,
    }

Flags用于定義后續(xù)可能的擴(kuò)展配置齿税,host和port為示例,根據(jù)應(yīng)用適用場(chǎng)景定義的基礎(chǔ)的配置項(xiàng)炊豪。

  • 2凌箕、定義默認(rèn)配置
    為了降低配置工作,讓配置類實(shí)現(xiàn)Default trait词渤,為應(yīng)用提供默認(rèn)配置牵舱。
    impl<Flags> Default for Config<Flags> where Flags:Default{
    
        fn default() -> Self {
            Self { 
                host: Default::default(), 
                port: Default::default(), 
                flags: Default::default() 
            }
        }
    }

實(shí)現(xiàn)Defualt trait時(shí),需要對(duì)Flags進(jìn)行約束缺虐,指定為Flags是實(shí)現(xiàn)Default trait的類型芜壁。Config實(shí)現(xiàn)了Default trait,同時(shí)要求
它的子項(xiàng)也實(shí)現(xiàn)Default trait高氮。在rust中慧妄,該要求比較常見(jiàn),例如:Debug和Clone trait等剪芍,都有類似要求塞淹。
當(dāng)不需要對(duì)Config進(jìn)行擴(kuò)展時(shí),F(xiàn)lags可以指定為()罪裹,如下:

    let config = Config::<()>::default();
  • 3饱普、通過(guò)擴(kuò)展配置項(xiàng)創(chuàng)建配置
    通過(guò)配置項(xiàng)运挫,創(chuàng)建Config實(shí)例
    impl<Flags> Config<Flags>{

        pub fn from_flags(flags:Flags)->Self{
            let default = Config::<()>::default();
            Self { 
                flags,
                host:default.host,
                port:default.port,
            }
        }
    }
  • 4、完整代碼及測(cè)試
#[derive(Debug, Clone)]
pub struct Config<Flags>{
    pub host:String,
    pub port:u32,
    pub flags:Flags,
}

impl<Flags> Config<Flags>{

    pub fn from_flags(flags:Flags)->Self{
        let default = Config::<()>::default();
        Self { 
            flags,
            host:default.host,
            port:default.port,
        }
    }
}

impl<Flags> Default for Config<Flags> where Flags:Default{
    
    fn default() -> Self {
        Self { host: Default::default(), port: Default::default(), flags: Default::default() }
    }
}

#[test]
fn test_default_config(){
    let config = Config::<()>::default();
    println!("The config is {:?}", config);
}

#[test]
fn test_from_flags(){
    #[derive(Debug, Clone)]
    struct Attrs{
        id:u32,
        name:String,
    }
    let attrs = Attrs{id:12, name:"bob".to_string()};
    let config = Config::from_flags(attrs);

    println!("The config is {:?}", config);
    println!("The id in config is {:?}", config.flags.id);
    println!("The name in config is {:?}", config.flags.name);
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末套耕,一起剝皮案震驚了整個(gè)濱河市谁帕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌冯袍,老刑警劉巖雇卷,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異颠猴,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)小染,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)翘瓮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人裤翩,你說(shuō)我怎么就攤上這事资盅。” “怎么了踊赠?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵呵扛,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我筐带,道長(zhǎng)今穿,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任伦籍,我火速辦了婚禮蓝晒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘帖鸦。我一直安慰自己芝薇,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布作儿。 她就那樣靜靜地躺著洛二,像睡著了一般。 火紅的嫁衣襯著肌膚如雪攻锰。 梳的紋絲不亂的頭發(fā)上晾嘶,一...
    開(kāi)封第一講書(shū)人閱讀 52,268評(píng)論 1 309
  • 那天,我揣著相機(jī)與錄音口注,去河邊找鬼变擒。 笑死,一個(gè)胖子當(dāng)著我的面吹牛寝志,可吹牛的內(nèi)容都是我干的娇斑。 我是一名探鬼主播策添,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼毫缆!你這毒婦竟也來(lái)了唯竹?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤苦丁,失蹤者是張志新(化名)和其女友劉穎浸颓,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體旺拉,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡产上,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蛾狗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晋涣。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖沉桌,靈堂內(nèi)的尸體忽然破棺而出谢鹊,到底是詐尸還是另有隱情,我是刑警寧澤留凭,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布佃扼,位于F島的核電站,受9級(jí)特大地震影響蔼夜,放射性物質(zhì)發(fā)生泄漏兼耀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一挎扰、第九天 我趴在偏房一處隱蔽的房頂上張望翠订。 院中可真熱鬧,春花似錦遵倦、人聲如沸尽超。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)似谁。三九已至,卻和暖如春掠哥,著一層夾襖步出監(jiān)牢的瞬間巩踏,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工续搀, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留塞琼,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓禁舷,卻偏偏與公主長(zhǎng)得像彪杉,于是被迫代替她去往敵國(guó)和親毅往。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容