Skip to content

Commit b2fe445

Browse files
authored
Merge pull request #32 from tinaun/doc-search
added `?docs` command
2 parents f9422cf + 9d5ec87 commit b2fe445

File tree

3 files changed

+48
-2
lines changed

3 files changed

+48
-2
lines changed

README.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,17 @@ Get all tags
2626
```
2727
?tags
2828
```
29+
30+
### Crates
31+
Search for a crate on crates.io
32+
```
33+
?crate query...
34+
```
35+
Retreive documentation for a crate
36+
```
37+
?docs query...
38+
```
39+
2940
### Ban
3041
Ban a user
3142
```

src/crates.rs

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,10 @@ struct Crate {
2222
updated: String,
2323
downloads: u64,
2424
description: String,
25+
documentation: Option<String>,
2526
}
2627

27-
pub fn search(args: Args) -> Result<()> {
28+
fn get_crate(args: &Args) -> Result<Option<Crate>> {
2829
let query = args
2930
.params
3031
.get("query")
@@ -40,7 +41,11 @@ pub fn search(args: Args) -> Result<()> {
4041
.send()?
4142
.json::<Crates>()?;
4243

43-
if let Some(krate) = crate_list.crates.get(0) {
44+
Ok(crate_list.crates.into_iter().nth(0))
45+
}
46+
47+
pub fn search(args: Args) -> Result<()> {
48+
if let Some(krate) = get_crate(&args)? {
4449
args.msg.channel_id.send_message(&args.cx, |m| {
4550
m.embed(|e| {
4651
e.title(&krate.name)
@@ -61,6 +66,22 @@ pub fn search(args: Args) -> Result<()> {
6166
Ok(())
6267
}
6368

69+
pub fn doc_search(args: Args) -> Result<()> {
70+
if let Some(krate) = get_crate(&args)? {
71+
let name = krate.name;
72+
let message = krate
73+
.documentation
74+
.unwrap_or_else(|| format!("https://docs.rs/{}", name));
75+
76+
api::send_reply(&args, &message)?;
77+
} else {
78+
let message = "No crates found.";
79+
api::send_reply(&args, message)?;
80+
}
81+
82+
Ok(())
83+
}
84+
6485
/// Print the help message
6586
pub fn help(args: Args) -> Result<()> {
6687
let help_string = "search for a crate on crates.io
@@ -70,3 +91,13 @@ pub fn help(args: Args) -> Result<()> {
7091
api::send_reply(&args, &help_string)?;
7192
Ok(())
7293
}
94+
95+
/// Print the help message
96+
pub fn doc_help(args: Args) -> Result<()> {
97+
let help_string = "retrieves documentation for a given crate
98+
```
99+
?docs query...
100+
```";
101+
api::send_reply(&args, &help_string)?;
102+
Ok(())
103+
}

src/main.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,10 @@ fn app() -> Result {
8282
cmds.add("?crate help", crates::help);
8383
cmds.add("?crate query...", crates::search);
8484

85+
// docs.rs
86+
cmds.add("?docs help", crates::doc_help);
87+
cmds.add("?docs query...", crates::doc_search);
88+
8589
// Slow mode.
8690
// 0 seconds disables slowmode
8791
cmds.add("?slowmode {channel} {seconds}", slow_mode);

0 commit comments

Comments
 (0)