Skip to content

Commit aebb9d5

Browse files
committed
fix: runtime error
1 parent 42061d0 commit aebb9d5

File tree

5 files changed

+41
-17
lines changed

5 files changed

+41
-17
lines changed

src/cmds/edit.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,11 @@ impl Command for EditCommand {
5151
use std::io::Write;
5252
use std::path::Path;
5353

54-
let id: i32 = m.get_one::<&str>("id").ok_or(Error::NoneError)?.parse()?;
54+
let id: i32 = m
55+
.get_one::<String>("id")
56+
.map(|s| s.as_str())
57+
.ok_or(Error::NoneError)?
58+
.parse()?;
5559
let cache = Cache::new()?;
5660
let problem = cache.get_problem(id)?;
5761
let mut conf = cache.to_owned().0.conf;
@@ -62,7 +66,8 @@ impl Command for EditCommand {
6266
// condition language
6367
if m.contains_id("lang") {
6468
conf.code.lang = m
65-
.get_one::<&str>("lang")
69+
.get_one::<String>("lang")
70+
.map(|s| s.as_str())
6671
.ok_or(Error::NoneError)?
6772
.to_string();
6873
conf.sync()?;

src/cmds/exec.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,11 @@ impl Command for ExecCommand {
4141
async fn handler(m: &ArgMatches) -> Result<(), crate::Error> {
4242
use crate::cache::{Cache, Run};
4343

44-
let id: i32 = m.get_one::<&str>("id").ok_or(Error::NoneError)?.parse()?;
44+
let id: i32 = m
45+
.get_one::<String>("id")
46+
.map(|s| s.as_str())
47+
.ok_or(Error::NoneError)?
48+
.parse()?;
4549
let cache = Cache::new()?;
4650
let res = cache.exec_problem(id, Run::Submit, None).await?;
4751

src/cmds/list.rs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ impl Command for ListCommand {
156156
// filter tag
157157
if m.contains_id("tag") {
158158
let ids = cache
159-
.get_tagged_questions(m.get_one::<&str>("tag").copied().unwrap_or(""))
159+
.get_tagged_questions(m.get_one::<String>("tag").map(|s| s.as_str()).unwrap_or(""))
160160
.await?;
161161
crate::helper::squash(&mut ps, ids)?;
162162
}
@@ -165,15 +165,18 @@ impl Command for ListCommand {
165165
if m.contains_id("category") {
166166
ps.retain(|x| {
167167
x.category
168-
== m.get_one::<&str>("category")
169-
.copied()
168+
== m.get_one::<String>("category")
169+
.map(|s| s.as_str())
170170
.unwrap_or("algorithms")
171171
});
172172
}
173173

174174
// filter query
175175
if m.contains_id("query") {
176-
let query = m.get_one::<&str>("query").ok_or(Error::NoneError)?;
176+
let query = m
177+
.get_one::<String>("query")
178+
.map(|s| s.as_str())
179+
.ok_or(Error::NoneError)?;
177180
crate::helper::filter(&mut ps, query.to_string());
178181
}
179182

@@ -189,7 +192,7 @@ impl Command for ListCommand {
189192
}
190193

191194
// retain if keyword exists
192-
if let Some(keyword) = m.get_one::<&str>("keyword") {
195+
if let Some(keyword) = m.get_one::<String>("keyword").map(|s| s.as_str()) {
193196
let lowercase_kw = keyword.to_lowercase();
194197
ps.retain(|x| x.name.to_lowercase().contains(&lowercase_kw));
195198
}

src/cmds/pick.rs

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
use super::Command;
33
use crate::err::Error;
44
use async_trait::async_trait;
5-
use clap::{Arg, ArgMatches, Command as ClapCommand};
5+
use clap::{Arg, ArgAction, ArgMatches, Command as ClapCommand};
66
/// Abstract pick command
77
///
88
/// ```sh
@@ -73,8 +73,8 @@ impl Command for PickCommand {
7373
Arg::new("daily")
7474
.short('d')
7575
.long("daily")
76-
.num_args(1)
77-
.help("Pick today's daily challenge"),
76+
.help("Pick today's daily challenge")
77+
.action(ArgAction::SetTrue),
7878
)
7979
}
8080

@@ -96,7 +96,11 @@ impl Command for PickCommand {
9696
#[cfg(feature = "pym")]
9797
{
9898
if m.contains_id("plan") {
99-
let ids = crate::pym::exec(m.get_one::<&str>("plan").unwrap_or(&""))?;
99+
let ids = crate::pym::exec(
100+
m.get_one::<String>("plan")
101+
.map(|s| s.as_str())
102+
.unwrap_or(""),
103+
)?;
100104
crate::helper::squash(&mut problems, ids)?;
101105
}
102106
}
@@ -105,14 +109,17 @@ impl Command for PickCommand {
105109
if m.contains_id("tag") {
106110
let ids = cache
107111
.clone()
108-
.get_tagged_questions(m.get_one::<&str>("tag").unwrap_or(&""))
112+
.get_tagged_questions(m.get_one::<String>("tag").map(|s| s.as_str()).unwrap_or(""))
109113
.await?;
110114
crate::helper::squash(&mut problems, ids)?;
111115
}
112116

113117
// query filter
114118
if m.contains_id("query") {
115-
let query = m.get_one::<&str>("query").ok_or(Error::NoneError)?;
119+
let query = m
120+
.get_one::<String>("query")
121+
.map(|s| s.as_str())
122+
.ok_or(Error::NoneError)?;
116123
crate::helper::filter(&mut problems, query.to_string());
117124
}
118125

@@ -123,7 +130,8 @@ impl Command for PickCommand {
123130
};
124131

125132
let fid = m
126-
.get_one::<&str>("id")
133+
.get_one::<String>("id")
134+
.map(|s| s.as_str())
127135
.and_then(|id| id.parse::<i32>().ok())
128136
.or(daily_id)
129137
.unwrap_or_else(|| {

src/cmds/test.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,12 @@ impl Command for TestCommand {
4646
/// `test` handler
4747
async fn handler(m: &ArgMatches) -> Result<(), Error> {
4848
use crate::cache::{Cache, Run};
49-
let id: i32 = m.get_one::<&str>("id").ok_or(Error::NoneError)?.parse()?;
50-
let testcase = m.get_one::<&str>("testcase");
49+
let id: i32 = m
50+
.get_one::<String>("id")
51+
.map(|s| s.as_str())
52+
.ok_or(Error::NoneError)?
53+
.parse()?;
54+
let testcase = m.get_one::<String>("testcase").map(|s| s.as_str());
5155
let case_str: Option<String> = match testcase {
5256
Some(case) => Option::from(case.replace("\\n", "\n")),
5357
_ => None,

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy