summary refs log tree commit diff stats
path: root/src/infoid.rs
diff options
context:
space:
mode:
authorSoniEx2 <endermoneymod@gmail.com>2021-06-26 12:53:52 -0300
committerSoniEx2 <endermoneymod@gmail.com>2021-06-26 13:11:38 -0300
commit42e6fa41a8f3903e2b8b05baf212b6d2c405d950 (patch)
tree4ca0b96d43914a103a48fa1a8b13f4bbd9e25829 /src/infoid.rs
parentb0dcbe6e3ee505009278826d0a9e651497c7182f (diff)
Clean up a bit
Diffstat (limited to 'src/infoid.rs')
-rw-r--r--src/infoid.rs85
1 files changed, 85 insertions, 0 deletions
diff --git a/src/infoid.rs b/src/infoid.rs
new file mode 100644
index 0000000..d39f059
--- /dev/null
+++ b/src/infoid.rs
@@ -0,0 +1,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(),
+        }
+    }
+}