puniyu_plugin 0.8.10

puniyu 插件库, 提供统一Api
Documentation
use puniyu_core::Version;
pub use puniyu_core::adapter::types::*;
pub use puniyu_core::plugin::{PluginId, PluginRegistry};
pub use puniyu_core::plugin::Plugin;
use serde::{Deserialize, Serialize};
use smol_str::SmolStr;

#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Eq)]
pub struct PluginInfo {
	pub name: SmolStr,
	pub author: Vec<SmolStr>,
	pub description: Option<SmolStr>,
	pub version: Version,
}
pub fn get_plugin<'a>(plugin: impl Into<PluginId<'a>>) -> Option<PluginInfo> {
	let plugin_id = plugin.into();
	let plugin = match plugin_id {
		PluginId::Index(index) => PluginRegistry::get_with_index(index),
		PluginId::Name(name) => PluginRegistry::get_with_plugin_name(name.as_ref()),
	};
	plugin.map(|plugin| PluginInfo {
		name: plugin.name().into(),
		author: plugin.author().into_iter().map(Into::into).collect(),
		description: plugin.description().map(Into::into),
		version: plugin.version(),
	})
}