super basic rust cdylib plugin system
at master 17 lines 547 B view raw
1use std::io::{Read, Seek}; 2 3use anyhow::*; 4use serde_derive::{Deserialize, Serialize}; 5use zip::read::ZipArchive; 6 7#[derive(Clone, Debug, Serialize, Deserialize)] 8pub struct PluginMeta { 9 pub name: String, 10 pub version: String, 11} 12 13pub fn read<R: Read + Seek>(zip: &mut ZipArchive<R>) -> Result<PluginMeta> { 14 let file = zip.by_name("plugin.toml").context("missing plugin.toml")?; 15 let bytes = file.bytes().try_collect::<Vec<u8>>().context("bad bytes")?; 16 Ok(toml::from_slice::<PluginMeta>(&bytes).context("invalid plugin.toml")?) 17}