Getters for plugin name/desc/vers

This commit is contained in:
SoniEx2 2018-06-01 11:02:38 -03:00
parent 1e6b572236
commit b9f4c3ce81
2 changed files with 54 additions and 2 deletions

View File

@ -1,6 +1,6 @@
[package] [package]
name = "hexchat-plugin" name = "hexchat-plugin"
version = "0.2.3" version = "0.2.4"
authors = ["SoniEx2 <endermoneymod@gmail.com>"] authors = ["SoniEx2 <endermoneymod@gmail.com>"]
description = "Lets you write HexChat plugins in Rust" description = "Lets you write HexChat plugins in Rust"
license = "AGPL-3.0+" license = "AGPL-3.0+"

View File

@ -404,7 +404,11 @@ impl PluginHandle {
} }
} }
/// Registers a hexchat plugin. /// Registers this hexchat plugin.
///
/// # Panics
///
/// This function panics if this plugin is already registered.
pub fn register(&mut self, name: &str, desc: &str, ver: &str) { pub fn register(&mut self, name: &str, desc: &str, ver: &str) {
unsafe { unsafe {
let info = self.info; let info = self.info;
@ -421,6 +425,51 @@ impl PluginHandle {
} }
} }
/// Returns this plugin's registered name.
///
/// # Panics
///
/// This function panics if this plugin is not registered.
pub fn get_name(&self) -> &str {
unsafe {
let info = self.info;
if !(*info.name).is_null() || !(*info.desc).is_null() || !(*info.vers).is_null() {
panic!("Attempt to get the name of a plugin that was not yet registered.");
}
std::str::from_utf8_unchecked(CStr::from_ptr(*info.name).to_bytes())
}
}
/// Returns this plugin's registered description.
///
/// # Panics
///
/// This function panics if this plugin is not registered.
pub fn get_description(&self) -> &str {
unsafe {
let info = self.info;
if !(*info.name).is_null() || !(*info.desc).is_null() || !(*info.vers).is_null() {
panic!("Attempt to get the description of a plugin that was not yet registered.");
}
std::str::from_utf8_unchecked(CStr::from_ptr(*info.desc).to_bytes())
}
}
/// Returns this plugin's registered version.
///
/// # Panics
///
/// This function panics if this plugin is not registered.
pub fn get_version(&self) -> &str {
unsafe {
let info = self.info;
if !(*info.name).is_null() || !(*info.desc).is_null() || !(*info.vers).is_null() {
panic!("Attempt to get the version of a plugin that was not yet registered.");
}
std::str::from_utf8_unchecked(CStr::from_ptr(*info.vers).to_bytes())
}
}
/// Ensures the current context is valid. /// Ensures the current context is valid.
/// ///
/// # Panics /// # Panics
@ -656,6 +705,7 @@ impl PluginHandle {
/// Returns information on the current context. /// Returns information on the current context.
/// ///
/// Note: `InfoId::Libdirfs` may return `None` or broken results if the result wouldn't be (valid) UTF-8. /// Note: `InfoId::Libdirfs` may return `None` or broken results if the result wouldn't be (valid) UTF-8.
// TODO this should be `id: InfoId`. fix in 0.3
pub fn get_info(&mut self, id: &InfoId) -> Option<String> { pub fn get_info(&mut self, id: &InfoId) -> Option<String> {
let ph = self.ph; let ph = self.ph;
let id_cstring = CString::new(&*id.name()).unwrap(); let id_cstring = CString::new(&*id.name()).unwrap();
@ -801,6 +851,8 @@ impl<'a> EnsureValidContext<'a> {
// ******** // // ******** //
// FORWARDS // // FORWARDS //
// ******** // // ******** //
// We can't just deref because then you could recursively ensure valid context and then it'd no
// longer work.
pub fn get_context(&mut self) -> Context { pub fn get_context(&mut self) -> Context {
self.ph.get_context() self.ph.get_context()