ens-normalize-rs 0.1.1

Ethereum Name Service (ENS) name normalization
Documentation
# ens-normalize-rs

![tests](https://github.com/sevenzing/ens-normalize-rs/actions/workflows/tests.yml/badge.svg)

A Rust implementation of ENS (Ethereum Name Service) name normalization.

## Description

`ens-normalize-rs` is a robust Rust library for normalizing and validating ENS names according to [ENSIP-15](https://docs.ens.domains/ensip/15) specifications. It handles Unicode normalization, validation, beautification of ENS names ensuring correct, consistent and idempotent behavior.

## Installation

```bash
cargo add ens-normalize-rs
```

Or add this to your project using Cargo:

```toml
[dependencies]
ens-normalize-rs = "0.1.1"
```

## Usage

```rust
fn main() {
    fn main() {
    // Using normalizer to reuse preloaded data
    let normalizer = ens_normalize_rs::EnsNameNormalizer::default();
    let name = "🅰️🅱.eth";
    let processed = normalizer.process(name).unwrap();
    let beautified_name = processed.beautify();
    let normalized_name = processed.normalize();

    assert_eq!(normalized_name, "🅰🅱.eth");
    assert_eq!(beautified_name, "🅰️🅱️.eth");

    // Using normalize directly
    let normalized = normalizer.normalize("Levvv.eth").unwrap();
    assert_eq!(normalized, "levvv.eth");

    // Handling errors
    assert!(matches!(
        normalizer.normalize("Levvv..eth"),
        Err(ens_normalize_rs::ProcessError::DisallowedSequence(
            ens_normalize_rs::DisallowedSequence::EmptyLabel
        ))
    ));
    assert!(matches!(
        // U+200D ZERO WIDTH JOINER
        normalizer.normalize("Ni‍ck.ETH"),
        Err(ens_normalize_rs::ProcessError::DisallowedSequence(
            ens_normalize_rs::DisallowedSequence::InvisibleCharacter(0x200d)
        ))
    ));
}
}
```

## Testing

Crate contains several types of tests:

- Unit tests
- Integration (e2e) tests -- `tests/e2e.rs`
- [Validation ENS docs tests]https://docs.ens.domains/ensip/15#appendix-validation-tests -- `tests/ens_tests.rs`


To run all tests simply run:

```
cargo test
```


## Roadmap


- [x] Tokenization
- [x] Normalization
- [x] Beautification
- [x] ENSIP-15 Validation Tests
- [ ] Unicode Normalization Tests
- [ ] CLI to update `specs.json` and `nf.json`
- [ ] analog of [ens_cure]https://github.com/namehash/ens-normalize-python?tab=readme-ov-file#ens_cure function
- [ ] analog of [ens_normalizations]https://github.com/namehash/ens-normalize-python/tree/main?tab=readme-ov-file#ens_normalizations function


## License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.