use crate::error::RconError;
use crate::parser::utils::check_invalid_command;
use crate::rcon_client::RconClient;
use crate::rcon_client::{TargetStatus, TargetStatusSuccess};
pub fn give(
client: &mut RconClient,
target: &str,
item: &str,
count: i32,
) -> Result<TargetStatus, RconError> {
let command = format!("give {} {} {}", target, item, count);
let feedback = client.send(command.to_string())?;
check_invalid_command(&feedback)?;
if feedback.contains("No player was found") {
return Ok(TargetStatus::NotFound);
}
if feedback.contains("cannot be found") {
return Ok(TargetStatus::NotFound);
}
if feedback.contains("Invalid name or UUID") {
return Err(RconError::UnknownParserError(
"Invalid name or UUID".to_string().to_string(),
));
}
if feedback.contains("Gave") {
return Ok(TargetStatus::Success(TargetStatusSuccess::Success));
}
if feedback.contains("Given") {
return Ok(TargetStatus::Success(TargetStatusSuccess::Success));
}
if feedback.contains("Unknown item") {
return Err(RconError::UnknownParserError(
"Unknown item".to_string().to_string(),
));
}
if feedback.contains("no such item with name") {
return Err(RconError::UnknownParserError(
"Unknown item".to_string().to_string(),
));
}
Err(RconError::UnknownParserError(
format!("Unknown error when {} {} {}", target, item, count).to_string(),
))
}