# Hallomai
Hallomai is a Rust-based library for transforming files between different formats: USFM, USX, and JSON. The library is designed to be compiled to WebAssembly (Wasm) for use in web applications, providing fast and reliable format conversions directly in the browser.
## Table of Contents
- [Overview](#overview)
- [Supported Formats](#supported-formats)
- [Installation](#installation)
- [Usage](#usage)
- [Rust](#rust)
- [Wasm](#wasm)
- [Building for WebAssembly](#building-for-webassembly)
- [Testing](#testing)
- [Contributing](#contributing)
- [License](#license)
## Overview
Hallomai provides functions to transform content from one format to another. The library currently supports three file formats:
- **USFM** (Unified Standard Format Marker)
- **USX** (Unified XML Standard)
- **JSON** (JavaScript Object Notation)
The main functionality is exposed via the `transform` function, which can be compiled to WebAssembly for integration into web applications. This allows for seamless file format transformations directly in the browser.
## Supported Formats
The following input and output file formats are supported:
- **Input Formats**: "usfm", "usx", "json" (or "usj")
- **Output Formats**: "usfm", "usx", "json" (or "usj")
## Installation
### Rust
Add the following to your `Cargo.toml`:
```toml
[dependencies]
hallomai = "0.1.0"
```
### Wasm
To use Hallomai in a web application, you need to compile it to WebAssembly. Follow the instructions in the Building for WebAssembly section.
## Usage
### Rust
```rust
use hallomai::transform;
let input_content = String::from("your input content here");
let input_format = String::from("usfm");
let output_format = String::from("json");
let result = transform(input_content, input_format, output_format);
println!("Transformed content: {}", result);
```
### Wasm
First, compile the library to WebAssembly:
```sh
wasm-pack build --target web
```
Then, use it in your JavaScript application:
```javascript
import init, { transform } from './path_to_generated_wasm_file';
async function run() {
await init();
const inputContent = `your input content here`;
const result = transform(inputContent, "usfm", "json");
console.log("Transformed content: ", result);
}
run();
```
### Benchmarks in Wasm (in a js code)
#### From the USFM of the book of "Psalms"

## Building for WebAssembly
To build Hallomai for WebAssembly:
1. Install the necessary tools:
```sh
cargo install wasm-pack
```
2. Build the project:
```sh
wasm-pack build --target web
```
3. The generated WebAssembly files will be in the pkg directory. You can include these files in your web application.
## Testing
TODO
## Contributing
Contributions are welcome! Please open an issue or submit a pull request on GitHub.
1. Fork the repository.
2. Create your feature branch (git checkout -b feature/YourFeature).
3. Commit your changes (git commit -m 'Add YourFeature').
4. Push to the branch (git push origin feature/YourFeature).
5. Open a pull request.
## License
Hallomai is licensed under the MIT License. See the [LICENSE](LICENSE) file for more details.