Sha256: 36a2198e42e601efc611ebd6b3c6861f3ccb6a63525829ae6a2603bcdc4c2b11

Contents?: true

Size: 899 Bytes

Versions: 38

Compression:

Stored size: 899 Bytes

Contents

use nom::bytes::complete::{tag, take_while_m_n};
use nom::combinator::map_res;
use nom::sequence::tuple;
use nom::IResult;

#[derive(Debug, PartialEq)]
pub struct Color {
  pub red: u8,
  pub green: u8,
  pub blue: u8,
}

fn from_hex(input: &str) -> Result<u8, std::num::ParseIntError> {
  u8::from_str_radix(input, 16)
}

fn is_hex_digit(c: char) -> bool {
  c.is_digit(16)
}

fn hex_primary(input: &str) -> IResult<&str, u8> {
  map_res(take_while_m_n(2, 2, is_hex_digit), from_hex)(input)
}

fn hex_color(input: &str) -> IResult<&str, Color> {
  let (input, _) = tag("#")(input)?;
  let (input, (red, green, blue)) = tuple((hex_primary, hex_primary, hex_primary))(input)?;

  Ok((input, Color { red, green, blue }))
}

#[test]
fn parse_color() {
  assert_eq!(
    hex_color("#2F14DF"),
    Ok((
      "",
      Color {
        red: 47,
        green: 20,
        blue: 223,
      }
    ))
  );
}

Version data entries

38 entries across 38 versions & 1 rubygems

Version Path
wasmtime-29.0.0 ./ext/cargo-vendor/nom-7.1.3/tests/css.rs
wasmtime-28.0.0 ./ext/cargo-vendor/nom-7.1.3/tests/css.rs
wasmtime-27.0.0 ./ext/cargo-vendor/nom-7.1.3/tests/css.rs
wasmtime-26.0.0 ./ext/cargo-vendor/nom-7.1.3/tests/css.rs
wasmtime-25.0.2 ./ext/cargo-vendor/nom-7.1.3/tests/css.rs
wasmtime-25.0.1 ./ext/cargo-vendor/nom-7.1.3/tests/css.rs
wasmtime-25.0.0 ./ext/cargo-vendor/nom-7.1.3/tests/css.rs
wasmtime-24.0.0 ./ext/cargo-vendor/nom-7.1.3/tests/css.rs
wasmtime-23.0.2 ./ext/cargo-vendor/nom-7.1.3/tests/css.rs
wasmtime-22.0.0 ./ext/cargo-vendor/nom-7.1.3/tests/css.rs
wasmtime-21.0.1 ./ext/cargo-vendor/nom-7.1.3/tests/css.rs
wasmtime-20.0.2 ./ext/cargo-vendor/nom-7.1.3/tests/css.rs
wasmtime-20.0.0 ./ext/cargo-vendor/nom-7.1.3/tests/css.rs
wasmtime-18.0.3 ./ext/cargo-vendor/nom-7.1.3/tests/css.rs
wasmtime-17.0.1 ./ext/cargo-vendor/nom-7.1.3/tests/css.rs
wasmtime-17.0.0 ./ext/cargo-vendor/nom-7.1.3/tests/css.rs
wasmtime-16.0.0 ./ext/cargo-vendor/nom-7.1.3/tests/css.rs
wasmtime-15.0.1 ./ext/cargo-vendor/nom-7.1.3/tests/css.rs
wasmtime-15.0.0 ./ext/cargo-vendor/nom-7.1.3/tests/css.rs
wasmtime-14.0.4 ./ext/cargo-vendor/nom-7.1.3/tests/css.rs