use elvis_core::{
derive::{Setter, Wrapper},
option_to_style,
value::{Position, Unit},
Node, Style, StyleWrapper,
};
#[derive(Default, Setter, Wrapper)]
pub struct Positioned {
pub child: Node,
pub pos: Option<Position>,
pub top: Option<Unit>,
pub right: Option<Unit>,
pub bottom: Option<Unit>,
pub left: Option<Unit>,
}
impl Positioned {
pub fn with(child: impl Into<Node>) -> Positioned {
Positioned::new().child(child)
}
}
impl Into<Node> for Positioned {
fn into(self) -> Node {
let mut styles: Vec<Style> = vec![];
option_to_style! {
styles, [
(Position, self.pos),
(Top, self.top),
(Right, self.right),
(Bottom, self.bottom),
(Left, self.left),
],
}
Node::default()
.children(vec![self.child])
.append_style(styles)
}
}