genebears
genebe + rs (Rust) = genebears
A lightweight, async Rust client for the GeneBe genetic
variant annotation API, with a DuckDB-backed cache and a token-bucket
rate limiter built in.
Installation
[dependencies]
genebears = "*"
tokio = { version = "1", features = ["full"] }
Quick start
use genebears::{GeneBears, ClientConfig, Variant, Genome, AnnotateOptions};
#[tokio::main]
async fn main() -> Result<(), genebears::GeneBearError> {
let client = GeneBears::new(ClientConfig::default())?;
let variants = vec![
Variant::new("22", 28_695_868, "AG", "A"),
Variant::new("6", 160_585_140, "T", "G"),
];
let results = client
.annotate_variants(&variants, Genome::Hg38, AnnotateOptions::default())
.await?;
for v in &results {
println!(
"gene={:?} revel={:?} alphamissense={:?} acmg={:?}",
v.gene_symbol,
v.revel_score,
v.alphamissense_score,
v.acmg_classification,
);
}
Ok(())
}
Credential and cache usage
use genebears::{GeneBears, ClientConfig};
let config = ClientConfig::with_credentials("you@example.com", "YOUR_API_KEY")
.with_cache("variants.duckdb");
let client = GeneBears::new(config)?;
On every subsequent run the cache is consulted first; only variants that have
never been seen before reach the network.
Annotation options
use genebears::AnnotateOptions;
let opts = AnnotateOptions {
use_refseq: Some(true), omit_advanced: true, ..Default::default()
};
Large variant lists
annotate_variants_chunked splits automatically at 1 000 and respects the
rate limiter between chunks:
let results = client
.annotate_variants_chunked(&my_big_vec, Genome::Hg38, AnnotateOptions::default())
.await?;
Authors