Skip to content

Commit 34e4c7e

Browse files
committed
search for items within crates
1 parent 47a5118 commit 34e4c7e

File tree

2 files changed

+18
-10
lines changed

2 files changed

+18
-10
lines changed

src/crates.rs

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -80,23 +80,31 @@ fn rustc_crate(crate_name: &str) -> Option<&str> {
8080
}
8181

8282
pub fn doc_search(args: Args) -> Result<()> {
83-
let crate_name = args
83+
let query = args
8484
.params
8585
.get("query")
8686
.ok_or("Unable to retrieve param: query")?;
8787

88-
if crate_name.contains("::") {
89-
let message = "`?docs` cannot retrieve documentation for items within a crate.";
90-
api::send_reply(&args, message)?;
91-
} else if let Some(rustc_crate) = rustc_crate(crate_name) {
92-
api::send_reply(&args, rustc_crate)?;
88+
let mut query_iter = query.splitn(2, "::");
89+
let crate_name = query_iter.next().unwrap();
90+
91+
let doc_url = if let Some(rustc_crate) = rustc_crate(crate_name) {
92+
Some(rustc_crate.to_string())
9393
} else if let Some(krate) = get_crate(&args)? {
9494
let name = krate.name;
95-
let message = krate
95+
krate
9696
.documentation
97-
.unwrap_or_else(|| format!("https://docs.rs/{}", name));
97+
.or_else(|| Some(format!("https://docs.rs/{}", name)))
98+
} else {
99+
None
100+
};
101+
102+
if let Some(mut url) = doc_url {
103+
if let Some(item_path) = query_iter.next() {
104+
url += &format!("?search={}", item_path);
105+
}
98106

99-
api::send_reply(&args, &message)?;
107+
api::send_reply(&args, &url)?;
100108
} else {
101109
let message = "No crates found.";
102110
api::send_reply(&args, message)?;

src/main.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ use crate::db::DB;
2323
use commands::{Args, Commands, GuardFn, Result};
2424
use diesel::prelude::*;
2525
use envy;
26+
use indexmap::IndexMap;
2627
use serde::Deserialize;
2728
use serenity::{model::prelude::*, prelude::*};
28-
use indexmap::IndexMap;
2929

3030
#[derive(Deserialize)]
3131
struct Config {

0 commit comments

Comments
 (0)