Trait advent_of_code_traits::ParseEachInput[][src]

pub trait ParseEachInput<const Day: u32, const Part: u32> {
    type Parsed;
    fn parse_input(input: &str) -> Self::Parsed;
}

Implement this trait if you need a different input for each part of a day.

This trait is generic over both day and part.

See also ParseInput which you should prefer implementing to use the same input type for each part of a day.

Example Usage

use advent_of_code_traits::{days::Day2, Part1, Part2, ParseEachInput};
pub struct AdventOfCode2020;

impl ParseEachInput<Day2, Part1> for AdventOfCode2020 {
    type Parsed = Vec<u32>;

    fn parse_input(_input: &str) -> Self::Parsed {
        // parse your input for _part1_
        // ...
        // let's just cheat for demonstration purposes
        vec![1]
    }
}

impl ParseEachInput<Day2, Part2> for AdventOfCode2020 {
    type Parsed = HashMap<String, u32>;

    fn parse_input(_input: &str) -> Self::Parsed {
        // parse your input for _part2_
        // ...
        // let's just cheat for demonstration purposes
        let mut hashmap = HashMap::new();
        hashmap.insert("A".into(), 2);
        hashmap
    }
}

let part1_input = <AdventOfCode2020 as ParseEachInput<Day2, Part1>>::parse_input("input");
let part2_input = <AdventOfCode2020 as ParseEachInput<Day2, Part2>>::parse_input("input");
assert_eq!(vec![1], part1_input);
assert_eq!(Some(&2), part2_input.values().next());

Associated Types

type Parsed[src]

The type that you want your Solution code to receive for a particular part of a day.

Loading content...

Required methods

Loading content...

Implementors

impl<T, const Day: u32> ParseEachInput<Day, Part1> for T where
    T: ParseInput<Day>, 
[src]

type Parsed = T::Parsed

fn parse_input(input: &str) -> Self::Parsed[src]

impl<T, const Day: u32> ParseEachInput<Day, Part2> for T where
    T: ParseInput<Day>, 
[src]

type Parsed = T::Parsed

fn parse_input(input: &str) -> Self::Parsed[src]

Loading content...