1use crate::*;
2use async_trait::async_trait;
3
4#[async_trait]
5pub trait Utility {
6 async fn get_my_ip(&self) -> Result<String, Error>;
7 async fn get_http_headers(&self) -> Result<HashMap<String, String>, Error>;
8}
9
10#[async_trait]
11impl Utility for ShodanClient {
12 async fn get_my_ip(&self) -> Result<String, Error> {
13 Self::fetch(self.build_request_url("/tools/myip", &Default::default())?).await
14 }
15
16 async fn get_http_headers(&self) -> Result<HashMap<String, String>, Error> {
17 Self::fetch(self.build_request_url("/tools/httpheaders", &Default::default())?).await
18 }
19}
20
21#[cfg(test)]
22mod tests {
23 use crate::tests::get_test_api_key;
24 use crate::*;
25
26 #[tokio::test]
27 async fn can_get_my_ip() {
28 let client = ShodanClient::new(get_test_api_key());
29 client.get_my_ip().await.unwrap();
30 }
31
32 #[tokio::test]
33 async fn can_get_http_headers() {
34 let client = ShodanClient::new(get_test_api_key());
35 client.get_http_headers().await.unwrap();
36 }
37}