Skip to content

Instantly share code, notes, and snippets.

@Lohann
Last active November 1, 2024 06:03
Show Gist options
  • Save Lohann/c208a9e708f41dd3275c3c64b31b730f to your computer and use it in GitHub Desktop.
Save Lohann/c208a9e708f41dd3275c3c64b31b730f to your computer and use it in GitHub Desktop.
[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"]
// 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