summaryrefslogtreecommitdiff
path: root/src/values/padding.rs
blob: 3cec7a76f9fbdcea8ef60c6ea9d90c0473f6a922 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
use std::str::FromStr;

use iced::Padding;

use super::ValueFromStr;

#[derive(Debug)]
pub enum PaddingError {
    Nah,
}

impl ValueFromStr for Padding {
    type Err = PaddingError;

    fn value_from_str(s: &str) -> Result<Self, Self::Err> {
        s.strip_prefix('[')
            .and_then(|s| s.strip_suffix(']'))
            .map(|s| {
                s.split(',')
                    .map(|n| f32::from_str(n).unwrap())
                    .collect::<Vec<_>>()
            })
            .and_then(|s| {
                if s.len() == 4 {
                    Some(Padding {
                        top: s[0],
                        right: s[1],
                        bottom: s[2],
                        left: s[3],
                    })
                } else {
                    None
                }
            })
            .ok_or(PaddingError::Nah)
    }
}