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::Auto12px->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 | left10px 20px 10px->top | left and right | bottom10px 20px->top and bottom | left and right10px->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.141592653591.3rad->1.31.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.2made serde feature optionalv0.1.1readme addedv0.1.0initial release