sparkle_interactions 0.16.0

Safe, concise Discord interaction handling for Twilight
Documentation
use twilight_model::application::interaction::application_command::{
    CommandDataOption,
    CommandOptionValue,
};

use crate::extract::ExtractOption;

#[test]
fn test_extract_option() {
    let option_name = "option";
    let subcommand_name = "subcommand";
    let subcommand_group_name = "subcommand_group";
    let option = CommandOptionValue::Boolean(true);

    let options = vec![CommandDataOption {
        name: option_name.to_owned(),
        value: option.clone(),
    }];

    let subcommand_options = vec![CommandDataOption {
        name: subcommand_name.to_owned(),
        value: CommandOptionValue::SubCommand(options.clone()),
    }];

    let subcommand_group_options = vec![CommandDataOption {
        name: subcommand_group_name.to_owned(),
        value: CommandOptionValue::SubCommandGroup(subcommand_options.clone()),
    }];

    assert_eq!(options.clone().option(option_name), Some(option.clone()));
    assert_eq!(
        subcommand_options.option(&format!("{subcommand_name}/{option_name}")),
        Some(option.clone())
    );
    assert_eq!(
        subcommand_group_options.option(&format!(
            "{subcommand_group_name}/{subcommand_name}/{option_name}"
        )),
        Some(option)
    );

    assert_eq!(options.option("a"), None);
}