use mouse_codes::{parse_button_ignore_case, parse_button_with_aliases, Button, Platform};
use std::str::FromStr;
fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("=== mouse-codes 基础用法示例 ===\n");
let platform = Platform::current();
println!("1. 当前平台: {}", platform);
println!("\n2. 按钮到代码转换:");
let buttons = [
Button::Left,
Button::Right,
Button::Middle,
Button::X1,
Button::X2,
];
for button in buttons {
let code = button.to_code(platform);
println!(" {} -> 代码 {}", button, code);
}
println!("\n3. 代码到按钮转换:");
let codes = [1, 2, 4, 5, 6]; for &code in &codes {
if let Some(button) = Button::from_code(code, Platform::Windows) {
println!(" 代码 {} -> {}", code, button);
} else {
println!(" 代码 {} -> 未知按钮", code);
}
}
println!("\n4. 字符串解析:");
let button_strs = ["Left", "RIGHT", "middle", "X1", "x2"];
for btn_str in button_strs {
match Button::from_str(btn_str) {
Ok(button) => println!(" '{}' -> {}", btn_str, button),
Err(_) => println!(" '{}' -> 解析失败", btn_str),
}
}
println!("\n5. 大小写不敏感解析:");
let case_variants = ["left", "LEFT", "Left", "LeFt"];
for variant in case_variants {
match parse_button_ignore_case(variant) {
Ok(button) => println!(" '{}' -> {}", variant, button),
Err(e) => println!(" '{}' -> 错误: {}", variant, e),
}
}
println!("\n6. 别名解析:");
let aliases = ["lmb", "rmb", "mmb", "back", "forward"];
for alias in aliases {
match parse_button_with_aliases(alias) {
Ok(button) => println!(" '{}' -> {}", alias, button),
Err(e) => println!(" '{}' -> 错误: {}", alias, e),
}
}
println!("\n7. 跨平台代码比较:");
let test_button = Button::Left;
println!(" {} 按钮在不同平台上的代码:", test_button);
println!(" Windows: {}", test_button.to_code(Platform::Windows));
println!(" Linux: {}", test_button.to_code(Platform::Linux));
println!(" macOS: {}", test_button.to_code(Platform::MacOS));
println!("\n8. 所有可用按钮:");
for button in &[
Button::Left,
Button::Right,
Button::Middle,
Button::X1,
Button::X2,
Button::Extra3,
Button::Extra4,
Button::Extra5,
Button::Extra6,
Button::Extra7,
Button::Extra8,
] {
println!(" - {}", button);
}
Ok(())
}