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}