README.md

# Exfasta

[![Version](https://img.shields.io/hexpm/v/exfasta.svg?style=flat-square)](https://hex.pm/packages/exfasta)
[![Build Status](https://travis-ci.org/nscyclone/exfasta.svg?branch=master)](https://travis-ci.org/nscyclone/exfasta)
[![License](https://img.shields.io/hexpm/l/exfasta.svg?style=flat-square)](https://github.com/nscyclone/exfasta/blob/master/LICENSE)

`Exfasta` is a simple but not very efficient (because it works on regular expressions) module for reading and writing [FASTA](https://en.wikipedia.org/wiki/FASTA_format)-formatted strings.

## Installation

Add `Exfasta` to your `mix.exs` dependencies:

```elixir
def deps do
  [{:exfasta, "~> 1.0"}]
end
```

Update your dependencies:

```sh-session
$ mix deps.get
```

## Usage

### `read!/1`

Reads the contents of the file from given path into a list of `Exfasta.FASTA` structs.

```elixir
iex> Exfasta.read!("dysferlin.fasta")
[%Exfasta.FASTA{header: "NG_008694.1:5001-5100 Homo sapiens dysferlin (DYSF), RefSeqGene on chromosome 2",
  sequence: "GCGGCCGCCGCCCAGCCAGGTGCAAAATGCCGTGTCATTGGGAGACTCCGCAGCCGGAGCATTAGATTACAGCTCGACGGAGCTCGGGAAGGGCGGCGGG"}]
```

### `write!/3`

Writes given `Exfasta.FASTA` struct or a list of such structs into a file located at given path.
Allows you to specify a list of [write modes](https://hexdocs.pm/elixir/File.html#t:mode/0) if needed.

```elixir
iex> Exfasta.write!("dysferlin.fasta", [
       %Exfasta.FASTA{header: "NG_008694.1:5101-5200 Homo sapiens dysferlin (DYSF), RefSeqGene on chromosome 2",
                      sequence: "GGTGGAAGATGAGCAGAAGCCCCTGTTCTCGGAACGCCGGCTGACAAGCGGGGTGAGCGCAGCCGGGGCGGGGACCCAGCCTAGCCCACTGGAGCAGCCG"},
       %Exfasta.FASTA{header: "NG_008694.1:5201-5300 Homo sapiens dysferlin (DYSF), RefSeqGene on chromosome 2",
                      sequence: "GGGGTGGCCCGTTCCCCTTTAAGAGCAACTGCTCTAAGCCAGGAGCCAGAGATTCGAGCCGGCCTCGCCCAGCCAGCCCTCTCCAGCGAGGGGACCCACA"}
     ], [:append])
:ok
```

### `parse!/1`

Parses the given FASTA-formatted string into a list of `Exfasta.FASTA` structs.

```elixir
iex> Exfasta.parse!(~s"""
     >NG_008694.1:5301-5400 Homo sapiens dysferlin (DYSF), RefSeqGene on chromosome 2
     AGCGGCGCCTCGGCCCTCCCGACCTTTCCGAGCCCTCTTTGCGCCCTGGGCGCACGGGGCCCTACACGCG
     CCAAGCATGCTGAGGGTCTTCATCCTCTAT
     """)
[%Exfasta.FASTA{header: "NG_008694.1:5301-5400 Homo sapiens dysferlin (DYSF), RefSeqGene on chromosome 2",
  sequence: "AGCGGCGCCTCGGCCCTCCCGACCTTTCCGAGCCCTCTTTGCGCCCTGGGCGCACGGGGCCCTACACGCGCCAAGCATGCTGAGGGTCTTCATCCTCTAT"}]
```

### `to_string/1`

The `String.Chars` protocol is implemented for the `Exfasta.FASTA` struct. `to_string/1` turns a single `Exfasta.FASTA` struct into a FASTA-formatted string.

```elixir
iex> to_string(%Exfasta.FASTA{
       header: "NG_008694.1:5401-5500 Homo sapiens dysferlin (DYSF), RefSeqGene on chromosome 2",
       sequence: "GCCGAGAACGTCCACACACCCGACACCGACATCAGCGATGCCTACTGCTCCGCGGTGTTTGCAGGTAGGAGGGGCCGACCACCCTCGCCCGGGGTCGGGG"})
">NG_008694.1:5401-5500 Homo sapiens dysferlin (DYSF), RefSeqGene on chromosome 2\nGCCGAGAACGTCCACACACCCGACACCGACATCAGCGATGCCTACTGCTCCGCGGTGTTTGCAGGTAGGAGGGGCCGACCACCCTCGCCCGGGGTCGGGG"
```

# [License](https://github.com/nscyclone/exfasta/blob/master/LICENSE)

Released under the MIT License.