# ada

Высокопроизводительная библиотека для парсинга и валидации URL, написанная на современном C++. Библиотека обеспечивает полное соответствие стандарту WHATWG URL и демонстрирует исключительную производительность, превосходя многие существующие решения. Разработанная с акцентом на скорость и надежность, Ada оптимально подходит для задач, требующих интенсивной обработки URL в высоконагруженных системах.

## Особенности

- полное соответствие стандарту WHATWG URL;
- исключительная производительность парсинга;
- минимальные зависимости и простота интеграции;
- безопасная обработка международных доменных имен (IDN);
- поддержка всех современных протоколов и схем URL.

## Основные компоненты

Библиотека состоит из нескольких модульных компонентов, каждый из которых решает конкретные задачи (подробнее с документацией можно ознакомиться [здесь](https://ada-url.github.io/ada/)):

### Базовый парсинг URL

Основной функционал библиотеки сосредоточен вокруг класса `ada::url`, который представляет разобранный URL. Каждый экземпляр содержит все компоненты URL, разложенные в соответствии со стандартом WHATWG.

Ключевые функции парсинга:

- `ada::parse()` — основной метод для разбора строки URL с возвратом результата в виде ada::url;
- `ada::can_parse()` — быстрая проверка возможности корректного разбора URL;
- `ada::parse_url()` — альтернативный интерфейс для парсинга с дополнительными опциями.

### Валидация и нормализация

Библиотека включает комплексные механизмы валидации, обеспечивающие корректность обрабатываемых URL. Все функции проверки реализованы с учетом последних требований стандартов безопасности.

Функции валидации:

- `ada::is_valid()` — проверка корректности разобранного URL;
- `ada::idna::to_ascii()` — преобразование Unicode-доменов в ASCII (IDN-поддержка);
- автоматическая нормализация процент-кодирования и регистра символов.

### Манипуляции с компонентами URL

`ada::url` предоставляет набор методов для доступа и модификации отдельных компонентов URL с гарантией сохранения корректности итоговой строки.

Доступные компоненты:

- `get_href()` — получение полной строки URL;
- `get_origin()` — извлечение origin (схема, хост, порт);
- `get_protocol()`, `set_protocol()` — доступ к схеме URL;
- `get_hostname()`, `set_hostname()` — работа с доменным именем;
- `get_pathname()`, `set_pathname()` — управление путем;
- `get_search()`, `set_search()` — доступ к query-строке;
- `get_hash()`, `set_hash()` — работа с фрагментом.

### Сериализация и преобразования

Библиотека обеспечивает эффективное преобразование между разобранным представлением URL и строковым форматом с поддержкой различных опций сериализации.

Методы сериализации:

- автоматическое приведение к строке при использовании в строковом контексте;
- `to_string()` — явное преобразование в строку с нормализацией;
- `get_components()` — получение отдельных компонентов в виде строк.
