azalea_brigadier/arguments/
bool_argument_type.rs1use std::{any::Any, sync::Arc};
2
3use super::ArgumentType;
4use crate::{
5 context::CommandContext,
6 exceptions::CommandSyntaxException,
7 string_reader::StringReader,
8 suggestion::{Suggestions, SuggestionsBuilder},
9};
10
11#[derive(Default)]
12struct Boolean;
13
14impl ArgumentType for Boolean {
15 fn parse(&self, reader: &mut StringReader) -> Result<Arc<dyn Any>, CommandSyntaxException> {
16 Ok(Arc::new(reader.read_boolean()?))
17 }
18
19 fn list_suggestions(&self, mut builder: SuggestionsBuilder) -> Suggestions {
20 if "true".starts_with(builder.remaining_lowercase()) {
21 builder = builder.suggest("true");
22 }
23 if "false".starts_with(builder.remaining_lowercase()) {
24 builder = builder.suggest("false");
25 }
26 builder.build()
27 }
28
29 fn examples(&self) -> Vec<String> {
30 vec!["true".to_string(), "false".to_string()]
31 }
32}
33
34pub fn bool() -> impl ArgumentType {
35 Boolean
36}
37pub fn get_bool<S>(context: &CommandContext<S>, name: &str) -> Option<bool> {
38 context
39 .argument(name)
40 .expect("argument with name not found")
41 .downcast_ref::<bool>()
42 .cloned()
43}