For now, the aim of this project is to build a Minimal Viable Product (MVP) for a HtsGet API with Rust.
This repository consists of a workspace composed by the following crates:
- htsget-search: This crate will contain the core logic needed to run searches in the genomic data according to the HtsGet specs. Things like how to access the genomic data with the reads or the variants from cloud storage, or how to run queries on their indices, or how to provide the information needed by the HtsGet spec. But this crate has nothing to do with the HTTP or REST protocols, only the core logic, which means that it could also be used to build other kind of interfaces on top of it, like Command Line Interfaces (CLI) for example.
- htsget-devtools: This is just a bunch of code helping us to explore the formats or to proof some concepts. Nothing to take very seriously ;-P
More crates will come as we progress in this project, for example the HTTP/REST layer.
This crate provides two basic abstractions:
-
HtsGet: The
HtsGet
trait represents an entity that can resolve queries according to the HtsGet spec. TheHtsGet
trait comes together with a basic model to represent basic entities needed to perform a search (Query
,Format
,Class
,Tags
,Headers
,Url
,Response
). We include a reference implementation called HtsGetFromStorage that provides the logic to resolve queries using an externalStorage
. It can only resolve queries for data in BAM format, but we plan to support other formats too. -
Storage: The
Storage
trait represents some kind of object based storage (either locally or in the cloud) that can be used to retrieve files for alignments, variants or its respective indexes, as well as to get metadata from them. We include a reference implementation using local files, but there are plans to support AWS S3 too.
- SAM specification
- The great noodles library
- Inspecting, summarizing, and manipulating the read alignments
- https://github.com/umccr/htsget-rs
- https://github.com/brainstorm/htsget-indexer
- https://github.com/brainstorm/bio-index-formats/
This project participates in the GSoC for 2021 under the Global Alliance for Genomics and Health. If you are interested on participating, please apply for the idea "Pure Rust serverless htsget implementation" in this document contacting the primary mentor.
This project is distributed under the terms of the MIT license.
See LICENSE for details.