1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
// This file is part of Hexchat Plugin API Bindings for Rust
// Copyright (C) 2018, 2021 Soni L.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
use std::borrow::Cow;
/// A hexchat_get_info key.
#[derive(Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Copy, Clone)]
pub enum InfoId<'a> {
/// Returns the away message, or `None` if the user is not away.
Away,
/// Returns the current channel name.
Channel,
/// Returns the current charset.
Charset,
/// Returns the hexchat configuration directory, e.g. `/home/user/.config/hexchat`.
Configdir,
/// Returns the text event format string for the given text event name.
EventText(&'a str),
/// Returns the (real) hostname of the current server.
Host,
/// Returns the contents of the input box.
Inputbox,
// TODO replace with a get_libdirfs function!
// /// Returns the library directory, e.g. `/usr/lib/hexchat`.
// ///
// /// May not always work, as this string isn't necessarily UTF-8, but local file system
// /// encoding.
// Libdirfs,
/// Returns the channel modes, if known, or `None`.
Modes,
/// Returns the current network name, or `None`.
Network,
/// Returns the user's current nick.
Nick,
/// Returns the user's nickserv password, if any, or `None`
Nickserv,
/// Returns the current server name, or `None` if you are not connected.
Server,
/// Returns the current channel topic.
Topic,
/// Returns the HexChat version string.
Version,
/// Returns the window status: "active", "hidden" or "normal".
WinStatus,
}
impl<'a> InfoId<'a> {
pub fn name(&self) -> Cow<'static, str> {
match *self {
InfoId::EventText(s) => {
let mut eventtext: String = "event_text ".into();
eventtext.push_str(&s);
eventtext.into()
},
InfoId::Away => "away".into(),
InfoId::Channel => "channel".into(),
InfoId::Charset => "charset".into(),
InfoId::Configdir => "configdir".into(),
InfoId::Host => "host".into(),
InfoId::Inputbox => "inputbox".into(),
//InfoId::Libdirfs => "libdirfs".into(),
InfoId::Modes => "modes".into(),
InfoId::Network => "network".into(),
InfoId::Nick => "nick".into(),
InfoId::Nickserv => "nickserv".into(),
InfoId::Server => "server".into(),
InfoId::Topic => "topic".into(),
InfoId::Version => "version".into(),
InfoId::WinStatus => "win_status".into(),
}
}
}
|