use crate::constants::ExpressionEnum;
use crate::reader::Reader;
use crate::writer::Writer;
use crate::wxf::reader::WxfReader;
use crate::wxf::writer::WxfWriter;
use crate::Error;
pub const DEFAULT_ENUM_HEAD: &str = "System`List";
pub fn write_unit_variant<W: Writer>(
w: &mut WxfWriter<W>,
head: &str,
name: &str,
) -> Result<(), Error> {
w.write_function(1)?;
w.write_symbol(head)?;
w.write_string(name)
}
pub fn begin_data_variant<W: Writer>(
w: &mut WxfWriter<W>,
head: &str,
name: &str,
n_data: usize,
) -> Result<(), Error> {
w.write_function(1 + n_data)?;
w.write_symbol(head)?;
w.write_string(name)
}
pub fn read_enum_header<'de, R: Reader<'de>>(
r: &mut WxfReader<R>,
tok: ExpressionEnum,
) -> Result<(u64, String), Error> {
match tok {
ExpressionEnum::Function => {
let n = r.read_varint()?;
if n == 0 {
return Err(Error::invalid("enum List is empty".into()));
}
r.skip()?; let variant = r.read_string()?;
Ok((n, variant))
},
ExpressionEnum::String => {
let variant = r.read_str()?.to_owned();
Ok((1, variant))
},
other => Err(Error::unexpected_token(&["Function", "String"], other)),
}
}
pub fn read_data_header<'de, R: Reader<'de>>(
_r: &mut WxfReader<R>,
_n_data: usize,
) -> Result<(), Error> {
Ok(())
}