Skip to content

Commit e867e9b

Browse files
committed
feat: input-sync command
1 parent 012c8e1 commit e867e9b

File tree

5 files changed

+354
-289
lines changed

5 files changed

+354
-289
lines changed

src/main.rs

+151-144
Original file line numberDiff line numberDiff line change
@@ -1,144 +1,151 @@
1-
use advent_of_code::template::commands::{all, download, read, scaffold, solve, time};
2-
use args::{parse, AppArguments};
3-
4-
#[cfg(feature = "today")]
5-
use advent_of_code::template::Day;
6-
#[cfg(feature = "today")]
7-
use std::process;
8-
9-
mod args {
10-
use advent_of_code::template::Day;
11-
use std::process;
12-
13-
pub enum AppArguments {
14-
Download {
15-
day: Day,
16-
},
17-
Read {
18-
day: Day,
19-
},
20-
Scaffold {
21-
day: Day,
22-
download: bool,
23-
overwrite: bool,
24-
},
25-
Solve {
26-
day: Day,
27-
release: bool,
28-
dhat: bool,
29-
submit: Option<u8>,
30-
},
31-
All {
32-
release: bool,
33-
},
34-
Time {
35-
all: bool,
36-
day: Option<Day>,
37-
store: bool,
38-
},
39-
#[cfg(feature = "today")]
40-
Today,
41-
}
42-
43-
pub fn parse() -> Result<AppArguments, Box<dyn std::error::Error>> {
44-
let mut args = pico_args::Arguments::from_env();
45-
46-
let app_args = match args.subcommand()?.as_deref() {
47-
Some("all") => AppArguments::All {
48-
release: args.contains("--release"),
49-
},
50-
Some("time") => {
51-
let all = args.contains("--all");
52-
let store = args.contains("--store");
53-
54-
AppArguments::Time {
55-
all,
56-
day: args.opt_free_from_str()?,
57-
store,
58-
}
59-
}
60-
Some("download") => AppArguments::Download {
61-
day: args.free_from_str()?,
62-
},
63-
Some("read") => AppArguments::Read {
64-
day: args.free_from_str()?,
65-
},
66-
Some("scaffold") => AppArguments::Scaffold {
67-
day: args.free_from_str()?,
68-
download: args.contains("--download"),
69-
overwrite: args.contains("--overwrite"),
70-
},
71-
Some("solve") => AppArguments::Solve {
72-
day: args.free_from_str()?,
73-
release: args.contains("--release"),
74-
submit: args.opt_value_from_str("--submit")?,
75-
dhat: args.contains("--dhat"),
76-
},
77-
#[cfg(feature = "today")]
78-
Some("today") => AppArguments::Today,
79-
Some(x) => {
80-
eprintln!("Unknown command: {x}");
81-
process::exit(1);
82-
}
83-
None => {
84-
eprintln!("No command specified.");
85-
process::exit(1);
86-
}
87-
};
88-
89-
let remaining = args.finish();
90-
if !remaining.is_empty() {
91-
eprintln!("Warning: unknown argument(s): {remaining:?}.");
92-
}
93-
94-
Ok(app_args)
95-
}
96-
}
97-
98-
fn main() {
99-
match parse() {
100-
Err(err) => {
101-
eprintln!("Error: {err}");
102-
std::process::exit(1);
103-
}
104-
Ok(args) => match args {
105-
AppArguments::All { release } => all::handle(release),
106-
AppArguments::Time { day, all, store } => time::handle(day, all, store),
107-
AppArguments::Download { day } => download::handle(day),
108-
AppArguments::Read { day } => read::handle(day),
109-
AppArguments::Scaffold {
110-
day,
111-
download,
112-
overwrite,
113-
} => {
114-
scaffold::handle(day, overwrite);
115-
if download {
116-
download::handle(day);
117-
}
118-
}
119-
AppArguments::Solve {
120-
day,
121-
release,
122-
dhat,
123-
submit,
124-
} => solve::handle(day, release, dhat, submit),
125-
#[cfg(feature = "today")]
126-
AppArguments::Today => {
127-
match Day::today() {
128-
Some(day) => {
129-
scaffold::handle(day, false);
130-
download::handle(day);
131-
read::handle(day)
132-
}
133-
None => {
134-
eprintln!(
135-
"`today` command can only be run between the 1st and \
136-
the 25th of december. Please use `scaffold` with a specific day."
137-
);
138-
process::exit(1)
139-
}
140-
};
141-
}
142-
},
143-
};
144-
}
1+
use advent_of_code::template::commands::{all, download, input_sync, read, scaffold, solve, time};
2+
use args::{parse, AppArguments};
3+
4+
#[cfg(feature = "today")]
5+
use advent_of_code::template::Day;
6+
#[cfg(feature = "today")]
7+
use std::process;
8+
9+
mod args {
10+
use advent_of_code::template::Day;
11+
use std::process;
12+
13+
pub enum AppArguments {
14+
Download {
15+
day: Day,
16+
},
17+
Read {
18+
day: Day,
19+
},
20+
Scaffold {
21+
day: Day,
22+
download: bool,
23+
overwrite: bool,
24+
},
25+
Solve {
26+
day: Day,
27+
release: bool,
28+
dhat: bool,
29+
submit: Option<u8>,
30+
},
31+
All {
32+
release: bool,
33+
},
34+
Time {
35+
all: bool,
36+
day: Option<Day>,
37+
store: bool,
38+
},
39+
InputSync {
40+
replace: bool,
41+
},
42+
#[cfg(feature = "today")]
43+
Today,
44+
}
45+
46+
pub fn parse() -> Result<AppArguments, Box<dyn std::error::Error>> {
47+
let mut args = pico_args::Arguments::from_env();
48+
49+
let app_args = match args.subcommand()?.as_deref() {
50+
Some("all") => AppArguments::All {
51+
release: args.contains("--release"),
52+
},
53+
Some("time") => {
54+
let all = args.contains("--all");
55+
let store = args.contains("--store");
56+
57+
AppArguments::Time {
58+
all,
59+
day: args.opt_free_from_str()?,
60+
store,
61+
}
62+
}
63+
Some("download") => AppArguments::Download {
64+
day: args.free_from_str()?,
65+
},
66+
Some("read") => AppArguments::Read {
67+
day: args.free_from_str()?,
68+
},
69+
Some("scaffold") => AppArguments::Scaffold {
70+
day: args.free_from_str()?,
71+
download: args.contains("--download"),
72+
overwrite: args.contains("--overwrite"),
73+
},
74+
Some("solve") => AppArguments::Solve {
75+
day: args.free_from_str()?,
76+
release: args.contains("--release"),
77+
submit: args.opt_value_from_str("--submit")?,
78+
dhat: args.contains("--dhat"),
79+
},
80+
Some("input-sync") => AppArguments::InputSync {
81+
replace: args.contains("--replace"),
82+
},
83+
#[cfg(feature = "today")]
84+
Some("today") => AppArguments::Today,
85+
Some(x) => {
86+
eprintln!("Unknown command: {x}");
87+
process::exit(1);
88+
}
89+
None => {
90+
eprintln!("No command specified.");
91+
process::exit(1);
92+
}
93+
};
94+
95+
let remaining = args.finish();
96+
if !remaining.is_empty() {
97+
eprintln!("Warning: unknown argument(s): {remaining:?}.");
98+
}
99+
100+
Ok(app_args)
101+
}
102+
}
103+
104+
fn main() {
105+
match parse() {
106+
Err(err) => {
107+
eprintln!("Error: {err}");
108+
std::process::exit(1);
109+
}
110+
Ok(args) => match args {
111+
AppArguments::All { release } => all::handle(release),
112+
AppArguments::Time { day, all, store } => time::handle(day, all, store),
113+
AppArguments::Download { day } => download::handle(day),
114+
AppArguments::Read { day } => read::handle(day),
115+
AppArguments::Scaffold {
116+
day,
117+
download,
118+
overwrite,
119+
} => {
120+
scaffold::handle(day, overwrite);
121+
if download {
122+
download::handle(day);
123+
}
124+
}
125+
AppArguments::Solve {
126+
day,
127+
release,
128+
dhat,
129+
submit,
130+
} => solve::handle(day, release, dhat, submit),
131+
AppArguments::InputSync { replace } => input_sync::handle(replace),
132+
#[cfg(feature = "today")]
133+
AppArguments::Today => {
134+
match Day::today() {
135+
Some(day) => {
136+
scaffold::handle(day, false);
137+
download::handle(day);
138+
read::handle(day)
139+
}
140+
None => {
141+
eprintln!(
142+
"`today` command can only be run between the 1st and \
143+
the 25th of december. Please use `scaffold` with a specific day."
144+
);
145+
process::exit(1)
146+
}
147+
};
148+
}
149+
},
150+
};
151+
}

0 commit comments

Comments
 (0)