use crate::{Read, Write, error::Error};
use super::novascript::nova_value::NovaValue;
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
pub struct FunctionCall {
pub id: i32,
pub parameters: Vec<CallParameter>,
}
impl Read for FunctionCall {
fn read(input: &mut impl std::io::Read) -> Result<Self, Error> {
Ok(Self {
id: Read::read(input)?,
parameters: Read::read(input)?,
})
}
}
impl Write for FunctionCall {
fn write(&self, output: &mut impl std::io::Write) -> Result<(), Error> {
self.id.write(output)?;
self.parameters.write(output)
}
}
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
pub struct CallParameter {
pub parameter_id: i32,
pub value: NovaValue,
}
impl Read for CallParameter {
fn read(input: &mut impl std::io::Read) -> Result<Self, Error> {
Ok(Self {
parameter_id: Read::read(input)?,
value: Read::read(input)?,
})
}
}
impl Write for CallParameter {
fn write(&self, output: &mut impl std::io::Write) -> Result<(), Error> {
self.parameter_id.write(output)?;
self.value.write(output)
}
}