README.md

# dnalg

DNAlg is a DNA sequence manipulation library. This is my implementation in Gleam.

> For a more portable version of this project, I will rewrite it in Go whenever I choose to learn Go.

## Plans

-   Restriction enzyme operations such as
    -   Simulated digestion
    -   Counting cut sites
    -   Silent mutation of cut sites

## Usage

To use `dnalg`, run it in the command line.
The easiest way to use it is by piping in a DNA sequence and pipe the output to a file.

You can also use the -i flag to specify an input file and the -o flag to specify an output file.

```sh
cat input.txt > dnalg [subcommand] > output.txt
```

The input can be a text file, or in FASTA format. I will look at adding support for `.dna` and `.gb` files in the future.

### Subcommands

#### `silent-mutate`

`silent-mutate` will silently mutate any restriction sites within the provided DNA sequence.

-   Sends the new DNA sequence to stdout.

```sh
dnalg silent-mutate [-r|--restriction string]
```

## Roadmap

You can find the roadmap for this project here: [ROADMAP.md](ROADMAP.md)

## Contributing

### Running the project

```sh
gleam run   # Run the project
gleam test  # Run the tests
```

### Adding functionality

-   Use the built-in `cli/` module to add subcommands to the CLI command (when it is complete);
-   Add new modules according to the flow outlines in the next section.

### Module management

Module structure is as follows:

-   `core/` is for primitives and shared functionality;
-   `actions/` are abstractions for core for use in commands;
-   `commands/` are primary functions which run via the CLI.

This is done to keep the code clean and avoid circular dependencies.
Try to have modules in `actions/` only import from `core/` and `commands/`
only import from `core/` or `actions/` where possible.

---

All rights reserved. © 2024, Trevor Fox