use async_trait::async_trait; use pumpkin_protocol::client::play::{ ArgumentType, CommandSuggestion, StringProtoArgBehavior, SuggestionProviders, }; use crate::{command::dispatcher::CommandError, server::Server}; use super::{ super::{ args::{ArgumentConsumer, RawArgs}, CommandSender, }, Arg, FindArg, GetClientSideArgParser, }; /// Should never be a permanent solution #[allow(unused)] pub struct SimpleArgConsumer; impl GetClientSideArgParser for SimpleArgConsumer { fn get_client_side_parser(&self) -> ArgumentType { ArgumentType::String(StringProtoArgBehavior::SingleWord) } fn get_client_side_suggestion_type_override(&self) -> Option { None } } #[async_trait] impl ArgumentConsumer for SimpleArgConsumer { async fn consume<'a>( &'a self, _sender: &CommandSender<'a>, _server: &'a Server, args: &mut RawArgs<'a>, ) -> Option> { Some(Arg::Simple(args.pop()?)) } async fn suggest<'a>( &'a self, _sender: &CommandSender<'a>, _server: &'a Server, _input: &'a str, ) -> Result>, CommandError> { Ok(None) } } impl<'a> FindArg<'a> for SimpleArgConsumer { type Data = &'a str; fn find_arg(args: &'a super::ConsumedArgs, name: &str) -> Result { match args.get(name) { Some(Arg::Simple(data)) => Ok(data), _ => Err(CommandError::InvalidConsumption(Some(name.to_string()))), } } }