# htsget-actix
[![MIT licensed][mit-badge]][mit-url]
[![Build Status][actions-badge]][actions-url]
[mit-badge]: https://img.shields.io/badge/license-MIT-blue.svg
[mit-url]: https://github.com/umccr/htsget-rs/blob/main/LICENSE
[actions-badge]: https://github.com/umccr/htsget-rs/actions/workflows/action.yml/badge.svg
[actions-url]: https://github.com/umccr/htsget-rs/actions?query=workflow%3Atests+branch%3Amain
> [!IMPORTANT]
> The functionality of [htsget-axum] is identical to this crate and it is recommended for all
> projects to use [htsget-axum] instead.
>
> This crate will be maintained to preserve backwards compatibility, however [htsget-axum] is
> favoured because it contains components that better fit with the rest of htsget-rs.
Framework dependent code for a server instance of [htsget-rs], using [Actix Web][actix-web].
[htsget-rs]: https://github.com/umccr/htsget-rs
[actix-web]: https://actix.rs/
[htsget-actix]: .
## Overview
This crate is used for running a local instance of htsget-rs. It is based on:
* [Actix Web][actix-web] for endpoints, routes, and middleware.
* [htsget-http] for htsget-rs specific HTTP responses
[htsget-http]: ../htsget-http
## Usage
This application has the same functionality as [htsget-axum]. To use it, following the [htsget-axum][htsget-axum] instructions, and
replace any calls to `htsget-axum` with `htsget-actix`.
It is recommended to use [htsget-axum] because it better fits with the rest of [htsget-rs]. For example [htsget-actix]
uses the actix-web framework for the ticket server, however it depends on [htsget-axum] for the data server. Also, components
in [htsget-lambda] use Axum dependencies.
[htsget-lambda]: ../htsget-lambda
### As a library
There shouldn't be any need to interact with this crate as a library, however some functions which deal with configuring routes
are exposed in the public API.
#### Feature flags
This crate has the following features:
* `s3-storage`: used to enable `S3Storage` functionality.
* `url-storage`: used to enable `UrlStorage` functionality.
* `experimental`: used to enable experimental features that aren't necessarily part of the htsget spec, such as Crypt4GH support through `C4GHStorage`.
## Benchmarks
Benchmarks for this crate written using [Criterion.rs][criterion-rs], and aim to compare the performance of this crate with the
[htsget Reference Server][htsget-refserver].
There are a set of light benchmarks, and one heavy benchmark. Light benchmarks can be performed by executing:
```
cargo bench -p htsget-axum -- LIGHT
```
To run the heavy benchmark, an additional vcf file needs to be downloaded, and placed in the [`data/vcf`][data-vcf] directory:
```
curl ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/data_collections/1000_genomes_project/release/20190312_biallelic_SNV_and_INDEL/ALL.chr14.shapeit2_integrated_snvindels_v2a_27022019.GRCh38.phased.vcf.gz > data/vcf/internationalgenomesample.vcf.gz
```
Then to run the heavy benchmark:
```
cargo bench -p htsget-axum -- HEAVY
```
[criterion-rs]: https://github.com/bheisler/criterion.rs
[htsget-refserver]: https://github.com/ga4gh/htsget-refserver
[data-vcf]: ../data/vcf
[htsget-axum]: ../htsget-axum/README.md#usage
## License
This project is licensed under the [MIT license][license].
[license]: LICENSE