use crate::binxml::name::BinXmlName;
use crate::guid::Guid;
use crate::binxml::value_variant::{BinXmlValue, BinXmlValueType};
use std::rc::Rc;
#[derive(Debug, PartialOrd, PartialEq, Clone)]
pub enum BinXMLDeserializedTokens<'a> {
FragmentHeader(BinXMLFragmentHeader),
TemplateInstance(BinXmlTemplate<'a>),
OpenStartElement(BinXMLOpenStartElement<'a>),
AttributeList,
Attribute(BinXMLAttribute<'a>),
CloseStartElement,
CloseEmptyElement,
CloseElement,
Value(BinXmlValue<'a>),
CDATASection,
CharRef,
EntityRef(BinXmlEntityReference<'a>),
PITarget,
PIData,
Substitution(TemplateSubstitutionDescriptor),
EndOfStream,
StartOfStream,
}
#[derive(Debug, PartialOrd, PartialEq, Clone)]
pub struct BinXMLOpenStartElement<'a> {
pub data_size: u32,
pub name: BinXmlName<'a>,
}
#[derive(Debug, PartialOrd, PartialEq, Clone)]
pub struct BinXMLTemplateDefinition<'a> {
pub next_template_offset: u32,
pub template_guid: Guid,
pub data_size: u32,
pub tokens: Vec<BinXMLDeserializedTokens<'a>>,
}
#[derive(Debug, PartialOrd, PartialEq, Clone)]
pub struct BinXmlEntityReference<'a> {
pub name: BinXmlName<'a>,
}
#[derive(Debug, PartialOrd, PartialEq, Clone)]
pub struct BinXmlTemplate<'a> {
pub definition: Rc<BinXMLTemplateDefinition<'a>>,
pub substitution_array: Vec<BinXmlValue<'a>>,
}
#[derive(Debug, PartialOrd, PartialEq, Clone)]
pub struct TemplateValueDescriptor {
pub size: u16,
pub value_type: BinXmlValueType,
}
#[derive(Debug, PartialOrd, PartialEq, Clone)]
pub struct TemplateSubstitutionDescriptor {
pub substitution_index: u16,
pub value_type: BinXmlValueType,
pub ignore: bool,
}
#[repr(C)]
#[derive(Debug, PartialOrd, PartialEq, Clone)]
pub struct BinXMLFragmentHeader {
pub major_version: u8,
pub minor_version: u8,
pub flags: u8,
}
#[derive(Debug, PartialOrd, PartialEq, Clone)]
pub struct BinXMLAttribute<'a> {
pub name: BinXmlName<'a>,
}