defmodule Mix.Tasks.Aoc do @moduledoc """ Create a code skeleton and fetch input for the AOC challenge of a day / year. This mix task runs `mix aoc.gen` followed by `mix aoc.get`. Afterwards, it prints the url of today's challenge. ## `mix aoc.gen` This task generates a code skeleton for the given day and year in `lib//.ex`, which uses the `AOC.aoc/3` macro. To customise the path where code is stored, refer to the `mix aoc.gen` documentation. ## `mix aoc.get` This task fetches the input and example input for a given day and year and stores it in `input/_.txt` and `input/__example.txt`. In order for this task to work, your session cookie should be passed as a command line argument or set up in the `:advent_of_code_utils` application environment. Please refer to the `mix aoc.get` documentation for more information. ## Command-line arguments - `-s` or `--session`: Specify the session cookie. - `-y` or `--year`: Specify the year. - `-d` or `--day`: Specify the day. - `--example`: Fetch example input (the default) - `--no-example`: Do not fetch example input All of these options take precedence over their application environment counterparts. """ @shortdoc "Fetch input and create code skeletons" use Mix.Task alias AOC.Helpers def run(args) do {_, year, day, _} = Helpers.parse_args!(args) do_try(Mix.Tasks.Aoc.Gen, "gen", args) do_try(Mix.Tasks.Aoc.Get, "get", args) Mix.shell().info("Today's challenge can be found at: #{url(year, day)}") end defp do_try(mod, name, args) do try do mod.run(args) rescue e in Mix.Error -> Mix.shell().info([:red, "* ", name, " error ", :reset, e.message]) end end @doc false def url(year, day), do: to_charlist("http://adventofcode.com/#{year}/day/#{day}") end