

Rustでdomain(entity)ロジックをcliとwasmのコードで共有したいです。  
しかし、wasmの関数には`#[wasm_bindgen]`を付与しないといけないため、以下のようにターゲットがwasmかどうかで生成する関数を制御しています。

domain.rsから抜粋

[code]

    #[cfg(target_family = "wasm")]
    #[wasm_bindgen]
    pub fn add(a: i32, b: i32) -> i32{
        a + b
    }
    
    #[cfg(not(target_family = "wasm"))]
    pub fn add(a: i32, b: i32) -> i32{
        a + b
    }
    
[/code]

<https://github.com/iranika/chimey>

本当なら関数を一元化するために`#[wasm_bindgen]`を付与するかどうかを制御したいですが、`#[cfg(target_family =
"wasm")]`ではアトリビュート単体の制御は出来ないはずです。  
(もしできる方法があったら教えていただきたいです)

なにかいい方法はないでしょうか。


CC BY-SA 4.0
2022-03-13T09:17:53.950
86815
2022-03-13T12:15:50.350
41707
question
rust webassembly
Rustで#[wasm_bindgen]アトリビュートを付与するかどうか、ターゲットファミリーで制御したいです


`#[cfg_attr(a, b)]`が使えそうです。

#[cfg(a)]が有効だったら#[b]をするという動作をするので、質問のケースに合致すると思います。

[code]

    #[cfg_attr(target_family = "wasm", wasm_bindgen)]
    pub fn add(a: i32, b: i32) -> i32 {
        a + b
    }
    
[/code]

資料（英語ですが...）

<https://doc.rust-lang.org/reference/conditional-compilation.html#the-
cfg_attr-attribute>


CC BY-SA 4.0
2022-03-13T12:15:50.350
86818
2022-03-13T12:15:50.350
43979
86815
answer