use codec::Encode;
use parity_wasm::elements::{deserialize_buffer, serialize, Module};
#[derive(Clone, Copy, Eq, PartialEq, Debug, thiserror::Error)]
pub enum Error {
#[error("Deserializing wasm failed")]
Deserialize,
#[error("Serializing wasm failed")]
Serialize,
}
pub fn embed_runtime_version(
wasm: &[u8],
mut version: crate::RuntimeVersion,
) -> Result<Vec<u8>, Error> {
let mut module: Module = deserialize_buffer(wasm).map_err(|_| Error::Deserialize)?;
let apis = version
.apis
.iter()
.map(Encode::encode)
.flat_map(|v| v.into_iter())
.collect::<Vec<u8>>();
module.set_custom_section("runtime_apis", apis);
version.apis.to_mut().clear();
module.set_custom_section("runtime_version", version.encode());
serialize(module).map_err(|_| Error::Serialize)
}