Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mattzque/bevy-ui-string-parser
Parser for various values used in bevy-ui.
https://github.com/mattzque/bevy-ui-string-parser
bevy bevy-ui css
Last synced: about 1 month ago
JSON representation
Parser for various values used in bevy-ui.
- Host: GitHub
- URL: https://github.com/mattzque/bevy-ui-string-parser
- Owner: mattzque
- License: apache-2.0
- Created: 2024-02-01T20:05:00.000Z (11 months ago)
- Default Branch: main
- Last Pushed: 2024-02-02T16:24:18.000Z (11 months ago)
- Last Synced: 2024-11-16T18:08:29.556Z (about 1 month ago)
- Topics: bevy, bevy-ui, css
- Language: Rust
- Homepage: https://crates.io/crates/bevy_ui_string_parser
- Size: 38.1 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE-APACHE
Awesome Lists containing this project
README
# Bevy-UI String Parser Utilities
![License](https://img.shields.io/badge/license-MIT%2FApache-blue.svg)
[![Crates.io](https://img.shields.io/crates/v/bevy_ui_string_parser.svg)](https://crates.io/crates/bevy_ui_string_parser)
[![Docs](https://docs.rs/bevy/badge.svg)](https://docs.rs/bevy_ui_string_parser/latest/bevy_ui_string_parser/)This rust crate provides a set of parsing functions that can be used to
convert strings into various bevy-ui types like `Color`, `Val` or `UiRect`.
The syntax matches CSS, but it doesn't try to replicate it perfectly.It depends on the [nom](https://crates.io/crates/nom) library for parsing.
## Parsers
### Color
Parses Color values, such as `#f0f` or `yellow`.
```rust
use bevy::render::color::Color;
use bevy_ui_string_parser::color_string_parser;
let color: Option = color_string_parser("#f00");
assert_eq!(color, Some(Color::RED));
```#### Supported syntax
* `red`, `blue` -> css color names (see https://drafts.csswg.org/css-color/#named-colors)
* `#f0f`, `#ff00ff` -> hex color (3 or 6 digits)
* `#ff00ff00` -> hex color with alpha (8 digits)
* `rgb(1.0, 0.0, 0.0)` -> rgb color (0.0-1.0)
* `rgba(1.0, 0.0, 0.0, 1.0)` -> rgb color with alpha (0.0-1.0)
* `hsl(0.0, 1.0, 0.5)` -> hsl color (0.0-1.0)
* `hsla(0.0, 1.0, 0.5, 1.0)` -> hsl color with alpha (0.0-1.0)### Val
Parses Val values, such as `1px` or `50%`.
```rust
use bevy::ui::Val;
use bevy_ui_string_parser::val_string_parser;
let value: Option = val_string_parser("45%");
assert_eq!(value, Some(Val::Percent(45.0)));
```#### Supported syntax
* `auto` -> `Val::Auto`
* `12px` -> `Val::Px(12.0)`
* `12%` -> `Val::Percent(12.0)`
* `12vw` -> `Val::Vw(12.0)`
* `12vh` -> `Val::Vh(12.0)`
* `12vmin` -> `Val::VMin(12.0)`
* `12vmax` -> `Val::VMax(12.0)`### Rect
Parses UiRect values, such as `25px 50px`.
This uses the same ordering as CSS properties like `padding` or `margin`,
see [mdn](https://developer.mozilla.org/en-US/docs/Web/CSS/padding) for more information.```rust
use bevy::ui::{UiRect, Val};
use bevy_ui_string_parser::rect_string_parser;
let rect: Option = rect_string_parser("50px 100px");
assert_eq!(rect, Some(UiRect::new(
Val::Px(100.0), Val::Px(100.0), Val::Px(50.0), Val::Px(50.0))));
```#### Supported syntax
* `10px 20px 30px 40px` -> `top | right | bottom | left`
* `10px 20px 10px` -> `top | left and right | bottom`
* `10px 20px` -> `top and bottom | left and right`
* `10px` -> `top, right, bottom and left`### Angle
Parses angles into float values, such as `180deg`, returns radians.
```rust
use bevy_ui_string_parser::angle_string_parser;
let angle: Option = angle_string_parser("180deg");
assert_eq!(angle, Some(180.0_f32.to_radians()));
```#### Supported syntax
* `180deg` -> `3.14159265359`
* `1.3rad` -> `1.3`
* `1.3` -> `1.3`## Serde
Each parser also provides a serde deserializer `*_serde_parser`, for example:
```rust
use serde::Deserialize;
use std::f32::consts::PI;#[derive(Deserialize)]
pub struct Foo {
#[serde(deserialize_with = "bevy_ui_string_parser::angle_serde_parser")]
pub angle: f32,
}let foo: Foo = serde_json::from_str(r#"{"angle": "180deg"}"#).unwrap();
assert_eq!(foo.angle, PI);
```It requires the optional `serde` feature.
## Changelog
* `v0.1.2` made serde feature optional
* `v0.1.1` readme added
* `v0.1.0` initial release