Last active
November 1, 2024 06:03
-
-
Save Lohann/c208a9e708f41dd3275c3c64b31b730f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[package] | |
name = "cfg-demo" | |
version = "0.1.0" | |
edition = "2021" | |
[dependencies] | |
# Essa biblioteca só sera incluída no código se a feature `feature_a` for habilitada. | |
rand = { version = "0.8.5", optional = true } | |
[features] | |
# Rode | |
# cargo run | |
# cargo run --no-default-features | |
# cargo run --all-features | |
# cargo run --no-default-features --features=multiply | |
# cargo run --no-default-features --features=feature_a | |
default = ["feature_a"] # features ativas por default | |
multiply = [] | |
feature_a = ["multiply", "rand/nightly"] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Words é do tipo u64 se o código NÃO for compilado para wasm32 | |
#[cfg(not(target_arch = "wasm32"))] | |
type Word = u64; | |
// Word é do tipo u32 se o código for compilado para wasm32 | |
#[cfg(target_arch = "wasm32")] | |
type Word = u32; | |
// Compile essa função se `multiply` estiver habilitado. | |
#[cfg(feature="multiply")] | |
#[must_use] | |
const fn multiply(a: Word, b: Word) -> Word { | |
a * b | |
} | |
// Use essa função se `feature_a` estiver habilitada. | |
#[cfg(feature="feature_a")] | |
#[must_use] | |
fn add(a: Word, b: Word) -> Word { | |
use rand::prelude::*; | |
let mut rng = rand::thread_rng(); | |
let x: Word = rng.gen(); | |
multiply(a + b, 2) + (x >> 16) | |
} | |
// Use essa função se a `feature_a` estiver desabilitada. | |
#[cfg(not(feature="feature_a"))] | |
const fn add(a: Word, b: Word) -> Word { | |
a + b | |
} | |
fn main() { | |
// cfg!(...) retorna um boleano que indica se a feature | |
// está habilitada ou não. | |
if cfg!(feature="feature_a") { | |
println!("feature_a está habilitada"); | |
} | |
// Aqui você não pode usar `cfg!(..)`, porque a função | |
// `multiply` não deve estar presente no código se a feature | |
// `multiply` estiver desabilitada. | |
#[cfg(feature="multiply")] | |
{ | |
let r = multiply(7, 3); | |
println!("multiply está habilitada = {r}"); | |
} | |
let x = add(1, 2); | |
println!("resultado = {x}"); | |
} | |
// So inclui o modulo `tests` no código se estiver rodando testes. | |
#[cfg(test)] | |
mod tests { | |
use super::add; | |
#[test] | |
fn test_add() { | |
assert_eq!(add(1, 2), 3); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment