| Crates.io | rcp_palette |
| lib.rs | rcp_palette |
| version | 0.2.0 |
| created_at | 2025-11-19 20:01:21.108329+00 |
| updated_at | 2025-11-20 00:38:22.100551+00 |
| description | Простий і надійний парсер для перетворення рядкових представлень CSS-кольорів (Hex, RGB, HSL, іменовані) у внутрішню структуру даних Rust. |
| homepage | |
| repository | https://github.com/dahl1a-bloom/rcp-pallete |
| max_upload_size | |
| id | 1940724 |
| size | 32,164 |
Простий і надійний парсер для перетворення рядкових представлень CSS-кольорів у внутрішню структуру даних Rust.
Проєкт rcp-palette парсить рядки, що відповідають CSS-нотації кольорів. На поточному етапі підтримуються формати:
#RRGGBB (наприклад, #1A2B3C);#RGB (наприклад, #FA0);rgb(R, G, B) (наприклад, rgb(255, 170, 0));hsl(H, S%, L%) (наприклад, hsl(0, 100%, 50%));red, blue, rebeccapurple).Color := Named | Hex | Rgb | Hsl
Named := "black" | "white" | "red" | "green" | "blue" | "yellow" | "cyan" | "magenta" | "gray" | "grey" | "rebeccapurple"
Hex := "#" (Hex6|Hex3)
Hex6 := HHHHHH ; шість шістнадцяткових символів
Hex3 := HHH ; три шістнадцяткових символи
Rgb := "rgb" "(" Int "," Int "," Int ")"
Hsl := "hsl" "(" Int "," Int "%" "," Int "%" ")"
H := [0-9A-Fa-f]
Int := 0..255 ; десяткові цілі та пробіли
Рядкове задання кольору передається функції parse_color().
Якщо рядок співпадає з іменованим CSS-кольором (наприклад, red, blue,
rebeccapurple), спочатку він нормалізується до нижнього регістру, після чого
виконується пошук у вбудованій таблиці відповідностей. У разі успіху повертається
відповідна трійка компонентів Color { r, g, b }. Якщо жодна назва не співпадає,
парсер переходить до наступних правил.
Якщо рядок починається з #, то викликається Hex-parser, котрий виконує валідацію (та підгон за потреби) його довжини та відповідності його символів, після чого виконується потрібна конвертація відформатованого Hex-рядка у структуру Color.
Якщо рядок починається з rgb(, то викликається RGB-парсер, котрий виокремлює числові компоненти поміж дужками з обробкою використання пробілів. Надалі відбувається валідація їх кількостей та приналежностей діапазону цілих чисел від 0 до 255, після чого вони безпосередньо стають компонентами структури Color.
Якщо рядок починається з hsl(, то викликається HSL-парсер, котрий виокремлює три компоненти H, S% та L% поміж дужками з обробкою використання пробілів. Надалі відбувається:
H у градусах (довільне дійсне число, нормалізується по модулю 360);S та L у відсотках (0–100) з приведенням до діапазону 0.0–1.0;Color { r: u8, g: u8, b: u8 }, а саме стандартне перетворення HSL → RGB з отриманням компонет r, g, b у діапазоні 0–255.Якщо рядок не відповідає жодному з цих форматів, повертається загальна помилка про недійсний префікс #.
Інші помилки повертаються при не успішному виконанні валідації чи форматування усіма парсерами.
Успішне завершення будь-якого парсера призводить до повернення об'єкта структури Color { r: u8, g: u8, b: u8 }.
Успішний парсинг повертає структуру Color { r: u8, g: u8, b: u8 }. Ця структура є універсальним поданням кольору і може бути використана для:
parse <#HEX> — парсинг окремого кольоруfile <path> — парсинг файлу з кольорами (по одному на рядок)author — показ інформації про авторів і крейтcargo run -- parse #1A2B3C
cargo run -- parse #FA0
cargo run -- parse "rgb(255, 170, 0)"
cargo run -- file ./colors.txt
cargo run -- author
cargo clippycargo fmtcargo test