2017-02-04 29 views
2

特定の構造体をオプションでシリアライズ可能にする機能をボックスに追加したいと思います。特にSerdeのカスタム派生マクロを使用したいと思います。 Serdeの依存関係はオプションであり、宣言は条件付きでフィーチャーの後ろに含まれます(extern crate)。次の点を考慮してください。条件フラグに基づいて条件付きで派生します

#[derive(Eq, PartialEq, Serialize)] 
struct MyStruct { 
    a: u8, 
    b: u8 
} 

有効にすると、すべて正常に動作します。無効にすると、この警告が表示されます。

error: '#[derive]' for custom traits is not stable enough for use. It is deprecated and will be removed in v1.15 (see issue #29644) 

派生した特性を条件付きで含める方法はありますか?私は安定1.15を使用しています。

エラーメッセージの問題を提出する必要がありますか?それは誤解を招くようです。 Fooのために実装されていませんDebugとしてコンパイルに失敗します。これにより

#[cfg_attr(feature = "example", derive(Debug))] 
struct Foo; 

fn main() { 
    println!("{:?}", Foo); 
} 

cargo runを、しかしcargo run --features exampleはコンパイルして正常に実行されます:フィーチャベースの条件付きコンパイルの他の多くのピースのように

答えて

3

cfg_attrを使用しています。

関連する問題