2017-09-01 22 views
2

我發現Can I mark a function as deprecated?,在我自己的箱子使用它:爲外部用戶棄用,但允許我嗎?

pub enum FooParams { 
    #[deprecated(since = "0.0.1", note = "use `FooParams::New` instead")] 
    Old, 
    New, 
} 

pub struct Foo; 

impl Foo { 
    pub fn new(p: FooParams) -> Foo { 
     match p { 
      FooParams::Old => {} 
      FooParams::New => {} 
     } 
     Foo 
    } 
} 

這適用於外包裝箱及警告他們不要使用FooParams::Old。 它也適用於我的箱子,產生惱人的警告。有什麼辦法可以禁用這個警告嗎?

我試過,但警告仍然存在:

#[allow(deprecated)] 
FooParams::Old => {} 
+1

我不認爲將屬性附加到表達式(或子表達式部分)當前在Rust中執行任何操作。你是否嘗試過將'#[allow(deprecated)]'屬性添加到函數中? –

+0

@WesleyWiser它的工作原理,但真正的功能使用來自其他板條箱的代碼,它抑制了它們關於棄用的警告嗎? – user1244932

回答

3

您可以將屬性移到匹配聲明:

impl Foo { 
    pub fn new(p: FooParams) -> Foo { 
     #[allow(deprecated)] 
     match p { 
      FooParams::Old => {} 
      FooParams::New => {} 
     } 
    } 
} 

Old其他用途在您的箱子將繼續有警告。

+0

但是我的箱子的依賴性呢?如果我使用其他箱子的'fn new'功能,這是否會壓制其他的警告,而不僅僅是'FooParams :: Old'? – user1244932

+0

@ user1244932我不認爲我完全理解你的問題。該屬性只能阻止它所在的* single *表達式的警告消息。使用您的箱子的人永遠不會因爲調用已棄用的功能而使用棄用警告。 – Shepmaster

相關問題