#![deny(missing_docs)]
#![cfg_attr(feature = "docs", feature(doc_cfg))]
use std::ffi::CString;
#[cfg(feature = "async")]
mod executor;
mod hashtable;
mod hdata;
mod weechat;
#[cfg(feature = "config_macro")]
#[macro_use]
mod config_macros;
#[cfg(feature = "config_macro")]
pub use paste;
#[cfg(feature = "config_macro")]
pub use strum;
pub mod buffer;
pub mod config;
pub mod hooks;
pub mod infolist;
pub use crate::weechat::{Args, Weechat};
pub use libc;
pub use weechat_macro::plugin;
pub use weechat_sys;
pub trait Plugin: Sized {
fn init(weechat: &Weechat, args: Args) -> Result<Self, ()>;
}
#[cfg(feature = "async")]
#[cfg_attr(feature = "docs", doc(cfg(r#async)))]
pub use executor::Task;
pub enum ReturnCode {
Ok = weechat_sys::WEECHAT_RC_OK as isize,
OkEat = weechat_sys::WEECHAT_RC_OK_EAT as isize,
Error = weechat_sys::WEECHAT_RC_ERROR as isize,
}
pub(crate) struct LossyCString;
impl LossyCString {
#[allow(clippy::new_ret_no_self)]
pub(crate) fn new<T: AsRef<str>>(t: T) -> CString {
match CString::new(t.as_ref()) {
Ok(cstr) => cstr,
Err(_) => CString::new(t.as_ref().replace('\0', "")).expect("string has no nulls"),
}
}
}