Crates.io | bevy_ui_string_parser |
lib.rs | bevy_ui_string_parser |
version | 0.1.2 |
source | src |
created_at | 2024-02-01 20:08:19.036735 |
updated_at | 2024-02-01 21:01:36.112007 |
description | Parser for various values used in bevy-ui. |
homepage | |
repository | https://github.com/mattzque/bevy-ui-string-parser |
max_upload_size | |
id | 1123551 |
size | 46,608 |
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 library for parsing.
Parses Color values, such as #f0f
or yellow
.
use bevy::render::color::Color;
use bevy_ui_string_parser::color_string_parser;
let color: Option<Color> = color_string_parser("#f00");
assert_eq!(color, Some(Color::RED));
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)Parses Val values, such as 1px
or 50%
.
use bevy::ui::Val;
use bevy_ui_string_parser::val_string_parser;
let value: Option<Val> = val_string_parser("45%");
assert_eq!(value, Some(Val::Percent(45.0)));
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)
Parses UiRect values, such as 25px 50px
.
This uses the same ordering as CSS properties like padding
or margin
,
see mdn for more information.
use bevy::ui::{UiRect, Val};
use bevy_ui_string_parser::rect_string_parser;
let rect: Option<UiRect> = 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))));
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
Parses angles into float values, such as 180deg
, returns radians.
use bevy_ui_string_parser::angle_string_parser;
let angle: Option<f32> = angle_string_parser("180deg");
assert_eq!(angle, Some(180.0_f32.to_radians()));
180deg
-> 3.14159265359
1.3rad
-> 1.3
1.3
-> 1.3
Each parser also provides a serde deserializer *_serde_parser
, for example:
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.
v0.1.2
made serde feature optionalv0.1.1
readme addedv0.1.0
initial release