mod model;
mod request;
mod response;
pub use super::comment::CommentAttributes;
use super::comment::{Comment, Comments};
use super::file::VtFiles;
use super::relationships::RelatedCollections;
pub use super::votes::VoteAttributes;
use super::votes::{Vote, Votes};
pub use model::{RelatedObjects, Relationships};
use request::{create_comment_req, create_vote_req};
use response::Root;
use crate::{
utils::{http_body_post, http_get},
VtClient, VtResult,
};
impl VtClient {
pub fn ip_info(&self, ip_address: &str) -> VtResult<Root> {
let url = format!("{}/ip_addresses/{}", &self.endpoint, ip_address);
http_get(&self.api_key, &self.user_agent, &url)
}
pub fn ip_comments(&self, ip_address: &str) -> VtResult<Comments> {
let url = format!("{}/ip_addresses/{}/comments", &self.endpoint, ip_address);
http_get(
self.api_key.as_str(),
self.user_agent.as_str(),
url.as_str(),
)
}
pub fn add_ip_comment(&self, ip_address: &str, attrs: CommentAttributes) -> VtResult<Comment> {
let url = format!("{}/ip_addresses/{}/comments", &self.endpoint, ip_address);
let body = create_comment_req(attrs);
http_body_post(
self.api_key.as_str(),
self.user_agent.as_str(),
url.as_str(),
body,
)
}
pub fn list_ip_related_objects(
&self,
ip_address: &str,
relationship: Relationships,
) -> VtResult<RelatedObjects> {
let url = format!(
"{}/ip_addresses/{}/{}",
self.endpoint.as_str(),
ip_address,
relationship.to_string(),
);
match relationship {
Relationships::Comments | Relationships::RelatedComments => {
let comments: Comments = http_get(
self.api_key.as_str(),
self.user_agent.as_str(),
url.as_str(),
)?;
Ok(RelatedObjects::Comments(comments))
}
Relationships::CommunicatingFiles
| Relationships::DownloadedFiles
| Relationships::ReferrerFiles => {
let files: VtFiles = http_get(
self.api_key.as_str(),
self.user_agent.as_str(),
url.as_str(),
)?;
Ok(RelatedObjects::Files(files))
}
}
}
pub fn list_ip_related_ids(
&self,
ip_address: &str,
relationship: Relationships,
) -> VtResult<RelatedCollections> {
let url = format!(
"{}/ip_addresses/{}/relationships/{}",
self.endpoint.as_str(),
ip_address,
relationship.to_string()
);
http_get(
self.api_key.as_str(),
self.user_agent.as_str(),
url.as_str(),
)
}
pub fn list_ip_votes(&self, ip_address: &str) -> VtResult<Votes> {
let url = format!(
"{}/ip_addresses/{}/votes",
self.endpoint.as_str(),
ip_address
);
http_get(
self.api_key.as_str(),
self.user_agent.as_str(),
url.as_str(),
)
}
pub fn create_ip_vote(&self, ip_address: &str, attrs: VoteAttributes) -> VtResult<Vote> {
let url = format!(
"{}/ip_addresses/{}/votes",
self.endpoint.as_str(),
ip_address
);
let req = create_vote_req(attrs);
http_body_post(
self.api_key.as_str(),
self.user_agent.as_str(),
url.as_str(),
req,
)
}
}