#![allow(
unused_imports,
clippy::doc_markdown,
clippy::too_many_lines,
clippy::needless_range_loop,
clippy::similar_names,
clippy::upper_case_acronyms,
clippy::struct_excessive_bools,
clippy::module_name_repetitions,
clippy::enum_variant_names,
clippy::never_loop,
clippy::cast_possible_truncation,
clippy::cast_lossless,
clippy::manual_range_contains,
clippy::useless_conversion,
clippy::unnecessary_cast,
clippy::redundant_closure_for_method_calls,
clippy::wildcard_imports,
clippy::match_same_arms,
clippy::single_match_else,
clippy::large_enum_variant,
clippy::result_large_err,
clippy::unreadable_literal
)]
use alloc::string::String;
use alloc::vec::Vec;
use crate::exi::seq::{SIMPLE_WIDTH, SeqReader, SeqWriter, Shape, Step};
use crate::exi::{
DateTime, Decimal, Decoder, Encoder, ExiError, ExiResult, Float, Lengths, ValueCtx,
};
pub const SCHEMA: &str = "V2G_CI_CommonTypes";
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct CLReqControlMode;
impl CLReqControlMode {
const SHAPE: Shape =
Shape { prod_before: &[0], width: &[1], repeat_width: &[], min: &[], max: &[] };
}
impl CLReqControlMode {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
w.end(e)?;
e.leave();
Ok(())
}
}
impl CLReqControlMode {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
loop {
match r.next(d)? {
Step::End => break,
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct CLResControlMode;
impl CLResControlMode {
const SHAPE: Shape =
Shape { prod_before: &[0], width: &[1], repeat_width: &[], min: &[], max: &[] };
}
impl CLResControlMode {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
w.end(e)?;
e.leave();
Ok(())
}
}
impl CLResControlMode {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
loop {
match r.next(d)? {
Step::End => break,
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct CanonicalizationMethod {
pub algorithm: String,
}
impl CanonicalizationMethod {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 2, 2],
repeat_width: &[0, 2],
min: &[1, 0],
max: &[1, 4294967295],
};
}
impl CanonicalizationMethod {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.algorithm;
w.start(e, 0, 0)?;
e.string(ValueCtx(2), item, Lengths::max(65536))?;
w.finish(0, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl CanonicalizationMethod {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
let mut f_0 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
let value = d.string(ValueCtx(2), Lengths::max(65536))?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => return Err(ExiError::UnsupportedOption),
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self { algorithm: f_0.ok_or(ExiError::MissingElement)? })
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ChargeLoopReq {
pub header: MessageHeader,
pub display_parameters: Option<DisplayParameters>,
pub meter_info_requested: bool,
}
impl ChargeLoopReq {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3],
width: &[1, 2, 1, 1],
repeat_width: &[0, 0, 0],
min: &[1, 0, 1],
max: &[1, 1, 1],
};
}
impl ChargeLoopReq {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.header;
w.start(e, 0, 0)?;
item.encode_body(e)?;
w.finish(0, 1);
}
if let Some(item) = &self.display_parameters {
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 1);
}
{
let item = &self.meter_info_requested;
w.start(e, 2, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.boolean(*item)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(2, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl ChargeLoopReq {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
let mut f_0 = None;
let mut f_1 = None;
let mut f_2 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
let value = MessageHeader::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = DisplayParameters::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.boolean()?;
d.expect_event(0, SIMPLE_WIDTH)?; f_2 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
header: f_0.ok_or(ExiError::MissingElement)?,
display_parameters: f_1,
meter_info_requested: f_2.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ChargeLoopRes {
pub header: MessageHeader,
pub response_code: ResponseCode,
pub evse_status: Option<EVSEStatus>,
pub meter_info: Option<MeterInfo>,
pub receipt: Option<Receipt>,
}
impl ChargeLoopRes {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4, 5],
width: &[1, 1, 3, 2, 2, 1],
repeat_width: &[0, 0, 0, 0, 0],
min: &[1, 1, 0, 0, 0],
max: &[1, 1, 1, 1, 1],
};
}
impl ChargeLoopRes {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.header;
w.start(e, 0, 0)?;
item.encode_body(e)?;
w.finish(0, 1);
}
{
let item = &self.response_code;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), ResponseCode::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
if let Some(item) = &self.evse_status {
w.start(e, 2, 0)?;
item.encode_body(e)?;
w.finish(2, 1);
}
if let Some(item) = &self.meter_info {
w.start(e, 3, 0)?;
item.encode_body(e)?;
w.finish(3, 1);
}
if let Some(item) = &self.receipt {
w.start(e, 4, 0)?;
item.encode_body(e)?;
w.finish(4, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl ChargeLoopRes {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
let mut f_0 = None;
let mut f_1 = None;
let mut f_2 = None;
let mut f_3 = None;
let mut f_4 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
let value = MessageHeader::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = ResponseCode::from_index(d.nbit(ResponseCode::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
let value = EVSEStatus::decode_body(d)?;
f_2 = Some(value);
}
Step::Item { index: 3, .. } => {
let value = MeterInfo::decode_body(d)?;
f_3 = Some(value);
}
Step::Item { index: 4, .. } => {
let value = Receipt::decode_body(d)?;
f_4 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
header: f_0.ok_or(ExiError::MissingElement)?,
response_code: f_1.ok_or(ExiError::MissingElement)?,
evse_status: f_2,
meter_info: f_3,
receipt: f_4,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ChargeParameterDiscoveryReq {
pub header: MessageHeader,
}
impl ChargeParameterDiscoveryReq {
const SHAPE: Shape =
Shape { prod_before: &[0, 1], width: &[1, 1], repeat_width: &[0], min: &[1], max: &[1] };
}
impl ChargeParameterDiscoveryReq {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.header;
w.start(e, 0, 0)?;
item.encode_body(e)?;
w.finish(0, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl ChargeParameterDiscoveryReq {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
let mut f_0 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
let value = MessageHeader::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self { header: f_0.ok_or(ExiError::MissingElement)? })
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ChargeParameterDiscoveryRes {
pub header: MessageHeader,
pub response_code: ResponseCode,
}
impl ChargeParameterDiscoveryRes {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 1, 1],
repeat_width: &[0, 0],
min: &[1, 1],
max: &[1, 1],
};
}
impl ChargeParameterDiscoveryRes {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.header;
w.start(e, 0, 0)?;
item.encode_body(e)?;
w.finish(0, 1);
}
{
let item = &self.response_code;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), ResponseCode::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl ChargeParameterDiscoveryRes {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
let mut f_0 = None;
let mut f_1 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
let value = MessageHeader::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = ResponseCode::from_index(d.nbit(ResponseCode::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
header: f_0.ok_or(ExiError::MissingElement)?,
response_code: f_1.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct DetailedCost {
pub amount: RationalNumber,
pub cost_per_unit: RationalNumber,
}
impl DetailedCost {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 1, 1],
repeat_width: &[0, 0],
min: &[1, 1],
max: &[1, 1],
};
}
impl DetailedCost {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.amount;
w.start(e, 0, 0)?;
item.encode_body(e)?;
w.finish(0, 1);
}
{
let item = &self.cost_per_unit;
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl DetailedCost {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
let mut f_0 = None;
let mut f_1 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
let value = RationalNumber::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = RationalNumber::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
amount: f_0.ok_or(ExiError::MissingElement)?,
cost_per_unit: f_1.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct DetailedTax {
pub tax_rule_id: u32,
pub amount: RationalNumber,
}
impl DetailedTax {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 1, 1],
repeat_width: &[0, 0],
min: &[1, 1],
max: &[1, 1],
};
}
impl DetailedTax {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.tax_rule_id;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.uint(u64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
{
let item = &self.amount;
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl DetailedTax {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
let mut f_0 = None;
let mut f_1 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = u32::try_from(d.uint()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = RationalNumber::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
tax_rule_id: f_0.ok_or(ExiError::MissingElement)?,
amount: f_1.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct DigestMethod {
pub algorithm: String,
}
impl DigestMethod {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 2, 2],
repeat_width: &[0, 2],
min: &[1, 0],
max: &[1, 4294967295],
};
}
impl DigestMethod {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.algorithm;
w.start(e, 0, 0)?;
e.string(ValueCtx(2), item, Lengths::max(65536))?;
w.finish(0, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl DigestMethod {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
let mut f_0 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
let value = d.string(ValueCtx(2), Lengths::max(65536))?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => return Err(ExiError::UnsupportedOption),
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self { algorithm: f_0.ok_or(ExiError::MissingElement)? })
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct DisplayParameters {
pub present_soc: Option<u8>,
pub minimum_soc: Option<u8>,
pub target_soc: Option<u8>,
pub maximum_soc: Option<u8>,
pub remaining_time_to_minimum_soc: Option<u32>,
pub remaining_time_to_target_soc: Option<u32>,
pub remaining_time_to_maximum_soc: Option<u32>,
pub charging_complete: Option<bool>,
pub battery_energy_capacity: Option<RationalNumber>,
pub inlet_hot: Option<bool>,
}
impl DisplayParameters {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
width: &[4, 4, 4, 4, 3, 3, 3, 3, 2, 2, 1],
repeat_width: &[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
min: &[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
max: &[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
};
}
impl DisplayParameters {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
if let Some(item) = &self.present_soc {
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.restricted(i64::from(*item), 0, 100)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
if let Some(item) = &self.minimum_soc {
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.restricted(i64::from(*item), 0, 100)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
if let Some(item) = &self.target_soc {
w.start(e, 2, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.restricted(i64::from(*item), 0, 100)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(2, 1);
}
if let Some(item) = &self.maximum_soc {
w.start(e, 3, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.restricted(i64::from(*item), 0, 100)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(3, 1);
}
if let Some(item) = &self.remaining_time_to_minimum_soc {
w.start(e, 4, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.uint(u64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(4, 1);
}
if let Some(item) = &self.remaining_time_to_target_soc {
w.start(e, 5, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.uint(u64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(5, 1);
}
if let Some(item) = &self.remaining_time_to_maximum_soc {
w.start(e, 6, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.uint(u64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(6, 1);
}
if let Some(item) = &self.charging_complete {
w.start(e, 7, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.boolean(*item)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(7, 1);
}
if let Some(item) = &self.battery_energy_capacity {
w.start(e, 8, 0)?;
item.encode_body(e)?;
w.finish(8, 1);
}
if let Some(item) = &self.inlet_hot {
w.start(e, 9, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.boolean(*item)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(9, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl DisplayParameters {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
let mut f_0 = None;
let mut f_1 = None;
let mut f_2 = None;
let mut f_3 = None;
let mut f_4 = None;
let mut f_5 = None;
let mut f_6 = None;
let mut f_7 = None;
let mut f_8 = None;
let mut f_9 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = u8::try_from(d.restricted(0, 100)?)
.map_err(|_| ExiError::ValueOutOfRange)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = u8::try_from(d.restricted(0, 100)?)
.map_err(|_| ExiError::ValueOutOfRange)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = u8::try_from(d.restricted(0, 100)?)
.map_err(|_| ExiError::ValueOutOfRange)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_2 = Some(value);
}
Step::Item { index: 3, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = u8::try_from(d.restricted(0, 100)?)
.map_err(|_| ExiError::ValueOutOfRange)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_3 = Some(value);
}
Step::Item { index: 4, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = u32::try_from(d.uint()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_4 = Some(value);
}
Step::Item { index: 5, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = u32::try_from(d.uint()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_5 = Some(value);
}
Step::Item { index: 6, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = u32::try_from(d.uint()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_6 = Some(value);
}
Step::Item { index: 7, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.boolean()?;
d.expect_event(0, SIMPLE_WIDTH)?; f_7 = Some(value);
}
Step::Item { index: 8, .. } => {
let value = RationalNumber::decode_body(d)?;
f_8 = Some(value);
}
Step::Item { index: 9, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.boolean()?;
d.expect_event(0, SIMPLE_WIDTH)?; f_9 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
present_soc: f_0,
minimum_soc: f_1,
target_soc: f_2,
maximum_soc: f_3,
remaining_time_to_minimum_soc: f_4,
remaining_time_to_target_soc: f_5,
remaining_time_to_maximum_soc: f_6,
charging_complete: f_7,
battery_energy_capacity: f_8,
inlet_hot: f_9,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct DynamicCLReqControlMode {
pub departure_time: Option<u32>,
pub ev_target_energy_request: RationalNumber,
pub ev_maximum_energy_request: RationalNumber,
pub ev_minimum_energy_request: RationalNumber,
}
impl DynamicCLReqControlMode {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4],
width: &[2, 1, 1, 1, 1],
repeat_width: &[0, 0, 0, 0],
min: &[0, 1, 1, 1],
max: &[1, 1, 1, 1],
};
}
impl DynamicCLReqControlMode {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
if let Some(item) = &self.departure_time {
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.uint(u64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
{
let item = &self.ev_target_energy_request;
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 1);
}
{
let item = &self.ev_maximum_energy_request;
w.start(e, 2, 0)?;
item.encode_body(e)?;
w.finish(2, 1);
}
{
let item = &self.ev_minimum_energy_request;
w.start(e, 3, 0)?;
item.encode_body(e)?;
w.finish(3, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl DynamicCLReqControlMode {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
let mut f_0 = None;
let mut f_1 = None;
let mut f_2 = None;
let mut f_3 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = u32::try_from(d.uint()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = RationalNumber::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
let value = RationalNumber::decode_body(d)?;
f_2 = Some(value);
}
Step::Item { index: 3, .. } => {
let value = RationalNumber::decode_body(d)?;
f_3 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
departure_time: f_0,
ev_target_energy_request: f_1.ok_or(ExiError::MissingElement)?,
ev_maximum_energy_request: f_2.ok_or(ExiError::MissingElement)?,
ev_minimum_energy_request: f_3.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct DynamicCLResControlMode {
pub departure_time: Option<u32>,
pub minimum_soc: Option<u8>,
pub target_soc: Option<u8>,
pub ack_max_delay: Option<u16>,
}
impl DynamicCLResControlMode {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4],
width: &[3, 3, 2, 2, 1],
repeat_width: &[0, 0, 0, 0],
min: &[0, 0, 0, 0],
max: &[1, 1, 1, 1],
};
}
impl DynamicCLResControlMode {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
if let Some(item) = &self.departure_time {
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.uint(u64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
if let Some(item) = &self.minimum_soc {
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.restricted(i64::from(*item), 0, 100)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
if let Some(item) = &self.target_soc {
w.start(e, 2, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.restricted(i64::from(*item), 0, 100)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(2, 1);
}
if let Some(item) = &self.ack_max_delay {
w.start(e, 3, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.uint(u64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(3, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl DynamicCLResControlMode {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
let mut f_0 = None;
let mut f_1 = None;
let mut f_2 = None;
let mut f_3 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = u32::try_from(d.uint()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = u8::try_from(d.restricted(0, 100)?)
.map_err(|_| ExiError::ValueOutOfRange)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = u8::try_from(d.restricted(0, 100)?)
.map_err(|_| ExiError::ValueOutOfRange)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_2 = Some(value);
}
Step::Item { index: 3, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = u16::try_from(d.uint()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_3 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self { departure_time: f_0, minimum_soc: f_1, target_soc: f_2, ack_max_delay: f_3 })
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct EVSEStatus {
pub notification_max_delay: u16,
pub evse_notification: EvseNotification,
}
impl EVSEStatus {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 1, 1],
repeat_width: &[0, 0],
min: &[1, 1],
max: &[1, 1],
};
}
impl EVSEStatus {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.notification_max_delay;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.uint(u64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
{
let item = &self.evse_notification;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), EvseNotification::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl EVSEStatus {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
let mut f_0 = None;
let mut f_1 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = u16::try_from(d.uint()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = EvseNotification::from_index(d.nbit(EvseNotification::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
notification_max_delay: f_0.ok_or(ExiError::MissingElement)?,
evse_notification: f_1.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ListOfRootCertificateIDs {
pub root_certificate_id: Vec<X509IssuerSerial>,
}
impl ListOfRootCertificateIDs {
const SHAPE: Shape =
Shape { prod_before: &[0, 1], width: &[1, 1], repeat_width: &[2], min: &[1], max: &[20] };
}
impl ListOfRootCertificateIDs {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let items = &self.root_certificate_id;
let count = items.len() as u32;
if count < 1 || count > 20 {
return Err(ExiError::ValueOutOfRange);
}
for (c, item) in items.iter().enumerate() {
w.start(e, 0, c as u32)?;
item.encode_body(e)?;
}
if count > 0 {
w.finish(0, count);
}
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl ListOfRootCertificateIDs {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
let mut f_0 = Vec::new();
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
let value = X509IssuerSerial::decode_body(d)?;
f_0.push(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
root_certificate_id: {
if (f_0.len() as u32) < 1 {
return Err(ExiError::MissingElement);
}
f_0
},
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Manifest {
pub id: Option<String>,
pub reference: Vec<Reference>,
}
impl Manifest {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[2, 1, 1],
repeat_width: &[0, 2],
min: &[0, 1],
max: &[1, 4294967295],
};
}
impl Manifest {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
if let Some(item) = &self.id {
w.start(e, 0, 0)?;
e.string(ValueCtx(26), item, Lengths::max(65536))?;
w.finish(0, 1);
}
{
let items = &self.reference;
let count = items.len() as u32;
if count < 1 {
return Err(ExiError::ValueOutOfRange);
}
for (c, item) in items.iter().enumerate() {
w.start(e, 1, c as u32)?;
item.encode_body(e)?;
}
if count > 0 {
w.finish(1, count);
}
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl Manifest {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
let mut f_0 = None;
let mut f_1 = Vec::new();
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
let value = d.string(ValueCtx(26), Lengths::max(65536))?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = Reference::decode_body(d)?;
f_1.push(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
id: f_0,
reference: {
if (f_1.len() as u32) < 1 {
return Err(ExiError::MissingElement);
}
f_1
},
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct MessageHeader {
pub session_id: Vec<u8>,
pub time_stamp: u64,
pub signature: Option<Signature>,
}
impl MessageHeader {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3],
width: &[1, 1, 2, 1],
repeat_width: &[0, 0, 0],
min: &[1, 1, 0],
max: &[1, 1, 1],
};
}
impl MessageHeader {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.session_id;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.binary(item, Lengths::exact(8))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
{
let item = &self.time_stamp;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.uint(u64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
if let Some(item) = &self.signature {
w.start(e, 2, 0)?;
item.encode_body(e)?;
w.finish(2, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl MessageHeader {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
let mut f_0 = None;
let mut f_1 = None;
let mut f_2 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.binary(Lengths::exact(8))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = u64::try_from(d.uint()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
let value = Signature::decode_body(d)?;
f_2 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
session_id: f_0.ok_or(ExiError::MissingElement)?,
time_stamp: f_1.ok_or(ExiError::MissingElement)?,
signature: f_2,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct MeterInfo {
pub meter_id: String,
pub charged_energy_reading_wh: u64,
pub bpt_discharged_energy_reading_wh: Option<u64>,
pub capacitive_energy_reading_va_rh: Option<u64>,
pub bpt_inductive_energy_reading_va_rh: Option<u64>,
pub meter_signature: Option<Vec<u8>>,
pub meter_status: Option<i16>,
pub meter_timestamp: Option<u64>,
}
impl MeterInfo {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4, 5, 6, 7, 8],
width: &[1, 1, 3, 3, 3, 3, 2, 2, 1],
repeat_width: &[0, 0, 0, 0, 0, 0, 0, 0],
min: &[1, 1, 0, 0, 0, 0, 0, 0],
max: &[1, 1, 1, 1, 1, 1, 1, 1],
};
}
impl MeterInfo {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.meter_id;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.string(ValueCtx(30), item, Lengths::max(32))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
{
let item = &self.charged_energy_reading_wh;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.uint(u64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
if let Some(item) = &self.bpt_discharged_energy_reading_wh {
w.start(e, 2, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.uint(u64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(2, 1);
}
if let Some(item) = &self.capacitive_energy_reading_va_rh {
w.start(e, 3, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.uint(u64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(3, 1);
}
if let Some(item) = &self.bpt_inductive_energy_reading_va_rh {
w.start(e, 4, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.uint(u64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(4, 1);
}
if let Some(item) = &self.meter_signature {
w.start(e, 5, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.binary(item, Lengths::max(64))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(5, 1);
}
if let Some(item) = &self.meter_status {
w.start(e, 6, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.int(i64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(6, 1);
}
if let Some(item) = &self.meter_timestamp {
w.start(e, 7, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.uint(u64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(7, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl MeterInfo {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
let mut f_0 = None;
let mut f_1 = None;
let mut f_2 = None;
let mut f_3 = None;
let mut f_4 = None;
let mut f_5 = None;
let mut f_6 = None;
let mut f_7 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.string(ValueCtx(30), Lengths::max(32))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = u64::try_from(d.uint()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = u64::try_from(d.uint()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_2 = Some(value);
}
Step::Item { index: 3, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = u64::try_from(d.uint()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_3 = Some(value);
}
Step::Item { index: 4, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = u64::try_from(d.uint()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_4 = Some(value);
}
Step::Item { index: 5, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.binary(Lengths::max(64))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_5 = Some(value);
}
Step::Item { index: 6, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = i16::try_from(d.int()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_6 = Some(value);
}
Step::Item { index: 7, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = u64::try_from(d.uint()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_7 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
meter_id: f_0.ok_or(ExiError::MissingElement)?,
charged_energy_reading_wh: f_1.ok_or(ExiError::MissingElement)?,
bpt_discharged_energy_reading_wh: f_2,
capacitive_energy_reading_va_rh: f_3,
bpt_inductive_energy_reading_va_rh: f_4,
meter_signature: f_5,
meter_status: f_6,
meter_timestamp: f_7,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct RSAKeyValue {
pub modulus: Vec<u8>,
pub exponent: Vec<u8>,
}
impl RSAKeyValue {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 1, 1],
repeat_width: &[0, 0],
min: &[1, 1],
max: &[1, 1],
};
}
impl RSAKeyValue {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.modulus;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.binary(item, Lengths::max(65536))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
{
let item = &self.exponent;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.binary(item, Lengths::max(65536))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl RSAKeyValue {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
let mut f_0 = None;
let mut f_1 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.binary(Lengths::max(65536))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.binary(Lengths::max(65536))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
modulus: f_0.ok_or(ExiError::MissingElement)?,
exponent: f_1.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct RationalNumber {
pub exponent: i8,
pub value: i16,
}
impl RationalNumber {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 1, 1],
repeat_width: &[0, 0],
min: &[1, 1],
max: &[1, 1],
};
}
impl RationalNumber {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.exponent;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.restricted(i64::from(*item), -128, 127)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
{
let item = &self.value;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.int(i64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl RationalNumber {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
let mut f_0 = None;
let mut f_1 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = i8::try_from(d.restricted(-128, 127)?)
.map_err(|_| ExiError::ValueOutOfRange)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = i16::try_from(d.int()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
exponent: f_0.ok_or(ExiError::MissingElement)?,
value: f_1.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Receipt {
pub time_anchor: u64,
pub energy_costs: Option<DetailedCost>,
pub occupancy_costs: Option<DetailedCost>,
pub additional_services_costs: Option<DetailedCost>,
pub overstay_costs: Option<DetailedCost>,
pub tax_costs: Vec<DetailedTax>,
}
impl Receipt {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4, 5, 6],
width: &[1, 3, 3, 3, 2, 2, 1],
repeat_width: &[0, 0, 0, 0, 0, 2],
min: &[1, 0, 0, 0, 0, 0],
max: &[1, 1, 1, 1, 1, 10],
};
}
impl Receipt {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.time_anchor;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.uint(u64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
if let Some(item) = &self.energy_costs {
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 1);
}
if let Some(item) = &self.occupancy_costs {
w.start(e, 2, 0)?;
item.encode_body(e)?;
w.finish(2, 1);
}
if let Some(item) = &self.additional_services_costs {
w.start(e, 3, 0)?;
item.encode_body(e)?;
w.finish(3, 1);
}
if let Some(item) = &self.overstay_costs {
w.start(e, 4, 0)?;
item.encode_body(e)?;
w.finish(4, 1);
}
{
let items = &self.tax_costs;
let count = items.len() as u32;
if count > 10 {
return Err(ExiError::ValueOutOfRange);
}
for (c, item) in items.iter().enumerate() {
w.start(e, 5, c as u32)?;
item.encode_body(e)?;
}
if count > 0 {
w.finish(5, count);
}
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl Receipt {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
let mut f_0 = None;
let mut f_1 = None;
let mut f_2 = None;
let mut f_3 = None;
let mut f_4 = None;
let mut f_5 = Vec::new();
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = u64::try_from(d.uint()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = DetailedCost::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
let value = DetailedCost::decode_body(d)?;
f_2 = Some(value);
}
Step::Item { index: 3, .. } => {
let value = DetailedCost::decode_body(d)?;
f_3 = Some(value);
}
Step::Item { index: 4, .. } => {
let value = DetailedCost::decode_body(d)?;
f_4 = Some(value);
}
Step::Item { index: 5, .. } => {
let value = DetailedTax::decode_body(d)?;
f_5.push(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
time_anchor: f_0.ok_or(ExiError::MissingElement)?,
energy_costs: f_1,
occupancy_costs: f_2,
additional_services_costs: f_3,
overstay_costs: f_4,
tax_costs: f_5,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Reference {
pub id: Option<String>,
pub r#type: Option<String>,
pub uri: Option<String>,
pub transforms: Option<Transforms>,
pub digest_method: DigestMethod,
pub digest_value: Vec<u8>,
}
impl Reference {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4, 5, 6],
width: &[3, 3, 2, 2, 1, 1, 1],
repeat_width: &[0, 0, 0, 0, 0, 0],
min: &[0, 0, 0, 0, 1, 1],
max: &[1, 1, 1, 1, 1, 1],
};
}
impl Reference {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
if let Some(item) = &self.id {
w.start(e, 0, 0)?;
e.string(ValueCtx(26), item, Lengths::max(65536))?;
w.finish(0, 1);
}
if let Some(item) = &self.r#type {
w.start(e, 1, 0)?;
e.string(ValueCtx(62), item, Lengths::max(65536))?;
w.finish(1, 1);
}
if let Some(item) = &self.uri {
w.start(e, 2, 0)?;
e.string(ValueCtx(63), item, Lengths::max(65536))?;
w.finish(2, 1);
}
if let Some(item) = &self.transforms {
w.start(e, 3, 0)?;
item.encode_body(e)?;
w.finish(3, 1);
}
{
let item = &self.digest_method;
w.start(e, 4, 0)?;
item.encode_body(e)?;
w.finish(4, 1);
}
{
let item = &self.digest_value;
w.start(e, 5, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.binary(item, Lengths::max(65536))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(5, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl Reference {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
let mut f_0 = None;
let mut f_1 = None;
let mut f_2 = None;
let mut f_3 = None;
let mut f_4 = None;
let mut f_5 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
let value = d.string(ValueCtx(26), Lengths::max(65536))?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = d.string(ValueCtx(62), Lengths::max(65536))?;
f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
let value = d.string(ValueCtx(63), Lengths::max(65536))?;
f_2 = Some(value);
}
Step::Item { index: 3, .. } => {
let value = Transforms::decode_body(d)?;
f_3 = Some(value);
}
Step::Item { index: 4, .. } => {
let value = DigestMethod::decode_body(d)?;
f_4 = Some(value);
}
Step::Item { index: 5, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.binary(Lengths::max(65536))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_5 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
id: f_0,
r#type: f_1,
uri: f_2,
transforms: f_3,
digest_method: f_4.ok_or(ExiError::MissingElement)?,
digest_value: f_5.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct RetrievalMethod {
pub r#type: Option<String>,
pub uri: Option<String>,
pub transforms: Option<Transforms>,
}
impl RetrievalMethod {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3],
width: &[3, 2, 2, 1],
repeat_width: &[0, 0, 0],
min: &[0, 0, 0],
max: &[1, 1, 1],
};
}
impl RetrievalMethod {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
if let Some(item) = &self.r#type {
w.start(e, 0, 0)?;
e.string(ValueCtx(62), item, Lengths::max(65536))?;
w.finish(0, 1);
}
if let Some(item) = &self.uri {
w.start(e, 1, 0)?;
e.string(ValueCtx(63), item, Lengths::max(65536))?;
w.finish(1, 1);
}
if let Some(item) = &self.transforms {
w.start(e, 2, 0)?;
item.encode_body(e)?;
w.finish(2, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl RetrievalMethod {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
let mut f_0 = None;
let mut f_1 = None;
let mut f_2 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
let value = d.string(ValueCtx(62), Lengths::max(65536))?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = d.string(ValueCtx(63), Lengths::max(65536))?;
f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
let value = Transforms::decode_body(d)?;
f_2 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self { r#type: f_0, uri: f_1, transforms: f_2 })
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ScheduledCLReqControlMode {
pub ev_target_energy_request: Option<RationalNumber>,
pub ev_maximum_energy_request: Option<RationalNumber>,
pub ev_minimum_energy_request: Option<RationalNumber>,
}
impl ScheduledCLReqControlMode {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3],
width: &[3, 2, 2, 1],
repeat_width: &[0, 0, 0],
min: &[0, 0, 0],
max: &[1, 1, 1],
};
}
impl ScheduledCLReqControlMode {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
if let Some(item) = &self.ev_target_energy_request {
w.start(e, 0, 0)?;
item.encode_body(e)?;
w.finish(0, 1);
}
if let Some(item) = &self.ev_maximum_energy_request {
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 1);
}
if let Some(item) = &self.ev_minimum_energy_request {
w.start(e, 2, 0)?;
item.encode_body(e)?;
w.finish(2, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl ScheduledCLReqControlMode {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
let mut f_0 = None;
let mut f_1 = None;
let mut f_2 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
let value = RationalNumber::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = RationalNumber::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
let value = RationalNumber::decode_body(d)?;
f_2 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
ev_target_energy_request: f_0,
ev_maximum_energy_request: f_1,
ev_minimum_energy_request: f_2,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ScheduledCLResControlMode;
impl ScheduledCLResControlMode {
const SHAPE: Shape =
Shape { prod_before: &[0], width: &[1], repeat_width: &[], min: &[], max: &[] };
}
impl ScheduledCLResControlMode {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
w.end(e)?;
e.leave();
Ok(())
}
}
impl ScheduledCLResControlMode {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
loop {
match r.next(d)? {
Step::End => break,
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct SignatureMethod {
pub algorithm: String,
pub hmac_output_length: Option<i64>,
}
impl SignatureMethod {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3],
width: &[1, 3, 2, 2],
repeat_width: &[0, 0, 2],
min: &[1, 0, 0],
max: &[1, 1, 4294967295],
};
}
impl SignatureMethod {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.algorithm;
w.start(e, 0, 0)?;
e.string(ValueCtx(2), item, Lengths::max(65536))?;
w.finish(0, 1);
}
if let Some(item) = &self.hmac_output_length {
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.int(i64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl SignatureMethod {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
let mut f_0 = None;
let mut f_1 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
let value = d.string(ValueCtx(2), Lengths::max(65536))?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = i64::try_from(d.int()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { index: 2, .. } => return Err(ExiError::UnsupportedOption),
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self { algorithm: f_0.ok_or(ExiError::MissingElement)?, hmac_output_length: f_1 })
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Signature {
pub id: Option<String>,
pub signed_info: SignedInfo,
pub signature_value: SignatureValue,
}
impl Signature {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4, 5],
width: &[2, 1, 1, 2, 2, 1],
repeat_width: &[0, 0, 0, 0, 2],
min: &[0, 1, 1, 0, 0],
max: &[1, 1, 1, 1, 4294967295],
};
}
impl Signature {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
if let Some(item) = &self.id {
w.start(e, 0, 0)?;
e.string(ValueCtx(26), item, Lengths::max(65536))?;
w.finish(0, 1);
}
{
let item = &self.signed_info;
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 1);
}
{
let item = &self.signature_value;
w.start(e, 2, 0)?;
item.encode_body(e)?;
w.finish(2, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl Signature {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
let mut f_0 = None;
let mut f_1 = None;
let mut f_2 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
let value = d.string(ValueCtx(26), Lengths::max(65536))?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = SignedInfo::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
let value = SignatureValue::decode_body(d)?;
f_2 = Some(value);
}
Step::Item { index: 3, .. } => return Err(ExiError::UnsupportedOption),
Step::Item { index: 4, .. } => return Err(ExiError::UnsupportedOption),
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
id: f_0,
signed_info: f_1.ok_or(ExiError::MissingElement)?,
signature_value: f_2.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct SignatureValue {
pub id: Option<String>,
pub value: Vec<u8>,
}
impl SignatureValue {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[2, 1, 1],
repeat_width: &[0, 0],
min: &[0, 1],
max: &[1, 1],
};
}
impl SignatureValue {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
if let Some(item) = &self.id {
w.start(e, 0, 0)?;
e.string(ValueCtx(26), item, Lengths::max(65536))?;
w.finish(0, 1);
}
{
let item = &self.value;
w.start(e, 1, 0)?;
e.binary(item, Lengths::max(65536))?;
w.finish(1, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl SignatureValue {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
let mut f_0 = None;
let mut f_1 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
let value = d.string(ValueCtx(26), Lengths::max(65536))?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = d.binary(Lengths::max(65536))?;
f_1 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self { id: f_0, value: f_1.ok_or(ExiError::MissingElement)? })
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct SignedInfo {
pub id: Option<String>,
pub canonicalization_method: CanonicalizationMethod,
pub signature_method: SignatureMethod,
pub reference: Vec<Reference>,
}
impl SignedInfo {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4],
width: &[2, 1, 1, 1, 1],
repeat_width: &[0, 0, 0, 2],
min: &[0, 1, 1, 1],
max: &[1, 1, 1, 4294967295],
};
}
impl SignedInfo {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
if let Some(item) = &self.id {
w.start(e, 0, 0)?;
e.string(ValueCtx(26), item, Lengths::max(65536))?;
w.finish(0, 1);
}
{
let item = &self.canonicalization_method;
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 1);
}
{
let item = &self.signature_method;
w.start(e, 2, 0)?;
item.encode_body(e)?;
w.finish(2, 1);
}
{
let items = &self.reference;
let count = items.len() as u32;
if count < 1 {
return Err(ExiError::ValueOutOfRange);
}
for (c, item) in items.iter().enumerate() {
w.start(e, 3, c as u32)?;
item.encode_body(e)?;
}
if count > 0 {
w.finish(3, count);
}
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl SignedInfo {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
let mut f_0 = None;
let mut f_1 = None;
let mut f_2 = None;
let mut f_3 = Vec::new();
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
let value = d.string(ValueCtx(26), Lengths::max(65536))?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = CanonicalizationMethod::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
let value = SignatureMethod::decode_body(d)?;
f_2 = Some(value);
}
Step::Item { index: 3, .. } => {
let value = Reference::decode_body(d)?;
f_3.push(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
id: f_0,
canonicalization_method: f_1.ok_or(ExiError::MissingElement)?,
signature_method: f_2.ok_or(ExiError::MissingElement)?,
reference: {
if (f_3.len() as u32) < 1 {
return Err(ExiError::MissingElement);
}
f_3
},
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Transform {
pub algorithm: String,
}
impl Transform {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 3],
width: &[1, 3, 2],
repeat_width: &[0, 3],
min: &[1, 0],
max: &[1, 4294967295],
};
}
impl Transform {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.algorithm;
w.start(e, 0, 0)?;
e.string(ValueCtx(2), item, Lengths::max(65536))?;
w.finish(0, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl Transform {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
let mut f_0 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
let value = d.string(ValueCtx(2), Lengths::max(65536))?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => return Err(ExiError::UnsupportedOption),
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self { algorithm: f_0.ok_or(ExiError::MissingElement)? })
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Transforms {
pub transform: Vec<Transform>,
}
impl Transforms {
const SHAPE: Shape = Shape {
prod_before: &[0, 1],
width: &[1, 1],
repeat_width: &[2],
min: &[1],
max: &[4294967295],
};
}
impl Transforms {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let items = &self.transform;
let count = items.len() as u32;
if count < 1 {
return Err(ExiError::ValueOutOfRange);
}
for (c, item) in items.iter().enumerate() {
w.start(e, 0, c as u32)?;
item.encode_body(e)?;
}
if count > 0 {
w.finish(0, count);
}
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl Transforms {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
let mut f_0 = Vec::new();
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
let value = Transform::decode_body(d)?;
f_0.push(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
transform: {
if (f_0.len() as u32) < 1 {
return Err(ExiError::MissingElement);
}
f_0
},
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct V2GMessage {
pub header: MessageHeader,
}
impl V2GMessage {
const SHAPE: Shape =
Shape { prod_before: &[0, 1], width: &[1, 1], repeat_width: &[0], min: &[1], max: &[1] };
}
impl V2GMessage {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.header;
w.start(e, 0, 0)?;
item.encode_body(e)?;
w.finish(0, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl V2GMessage {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
let mut f_0 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
let value = MessageHeader::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self { header: f_0.ok_or(ExiError::MissingElement)? })
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct V2GRequest {
pub header: MessageHeader,
}
impl V2GRequest {
const SHAPE: Shape =
Shape { prod_before: &[0, 1], width: &[1, 1], repeat_width: &[0], min: &[1], max: &[1] };
}
impl V2GRequest {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.header;
w.start(e, 0, 0)?;
item.encode_body(e)?;
w.finish(0, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl V2GRequest {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
let mut f_0 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
let value = MessageHeader::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self { header: f_0.ok_or(ExiError::MissingElement)? })
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct V2GResponse {
pub header: MessageHeader,
pub response_code: ResponseCode,
}
impl V2GResponse {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 1, 1],
repeat_width: &[0, 0],
min: &[1, 1],
max: &[1, 1],
};
}
impl V2GResponse {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.header;
w.start(e, 0, 0)?;
item.encode_body(e)?;
w.finish(0, 1);
}
{
let item = &self.response_code;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), ResponseCode::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl V2GResponse {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
let mut f_0 = None;
let mut f_1 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
let value = MessageHeader::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = ResponseCode::from_index(d.nbit(ResponseCode::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
header: f_0.ok_or(ExiError::MissingElement)?,
response_code: f_1.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct X509IssuerSerial {
pub x509_issuer_name: String,
pub x509_serial_number: i64,
}
impl X509IssuerSerial {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 1, 1],
repeat_width: &[0, 0],
min: &[1, 1],
max: &[1, 1],
};
}
impl X509IssuerSerial {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.x509_issuer_name;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.string(ValueCtx(65), item, Lengths::max(65536))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
{
let item = &self.x509_serial_number;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.int(i64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl X509IssuerSerial {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
let mut f_0 = None;
let mut f_1 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.string(ValueCtx(65), Lengths::max(65536))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = i64::try_from(d.int()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
x509_issuer_name: f_0.ok_or(ExiError::MissingElement)?,
x509_serial_number: f_1.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[repr(u16)]
pub enum EvseNotification {
Pause = 0,
ExitStandby = 1,
Terminate = 2,
ScheduleRenegotiation = 3,
ServiceRenegotiation = 4,
MeteringConfirmation = 5,
}
impl EvseNotification {
pub const WIDTH: u32 = 3;
pub const ALL: [Self; 6] = [
Self::Pause,
Self::ExitStandby,
Self::Terminate,
Self::ScheduleRenegotiation,
Self::ServiceRenegotiation,
Self::MeteringConfirmation,
];
#[must_use]
pub const fn as_index(self) -> u64 {
self as u64
}
pub const fn from_index(index: u64) -> ExiResult<Self> {
Ok(match index {
0 => Self::Pause,
1 => Self::ExitStandby,
2 => Self::Terminate,
3 => Self::ScheduleRenegotiation,
4 => Self::ServiceRenegotiation,
5 => Self::MeteringConfirmation,
_ => return Err(ExiError::UnknownEnumValue),
})
}
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::Pause => "Pause",
Self::ExitStandby => "ExitStandby",
Self::Terminate => "Terminate",
Self::ScheduleRenegotiation => "ScheduleRenegotiation",
Self::ServiceRenegotiation => "ServiceRenegotiation",
Self::MeteringConfirmation => "MeteringConfirmation",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[repr(u16)]
pub enum Processing {
Finished = 0,
Ongoing = 1,
OngoingWaitingForCustomerInteraction = 2,
}
impl Processing {
pub const WIDTH: u32 = 2;
pub const ALL: [Self; 3] =
[Self::Finished, Self::Ongoing, Self::OngoingWaitingForCustomerInteraction];
#[must_use]
pub const fn as_index(self) -> u64 {
self as u64
}
pub const fn from_index(index: u64) -> ExiResult<Self> {
Ok(match index {
0 => Self::Finished,
1 => Self::Ongoing,
2 => Self::OngoingWaitingForCustomerInteraction,
_ => return Err(ExiError::UnknownEnumValue),
})
}
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::Finished => "Finished",
Self::Ongoing => "Ongoing",
Self::OngoingWaitingForCustomerInteraction => "Ongoing_WaitingForCustomerInteraction",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[repr(u16)]
pub enum ResponseCode {
OK = 0,
OKCertificateExpiresSoon = 1,
OKNewSessionEstablished = 2,
OKOldSessionJoined = 3,
OKPowerToleranceConfirmed = 4,
WARNINGAuthorizationSelectionInvalid = 5,
WARNINGCertificateExpired = 6,
WARNINGCertificateNotYetValid = 7,
WARNINGCertificateRevoked = 8,
WARNINGCertificateValidationError = 9,
WARNINGChallengeInvalid = 10,
WARNINGEIMAuthorizationFailure = 11,
WARNINGEMSPUnknown = 12,
WARNINGEVPowerProfileViolation = 13,
WARNINGGeneralPnCAuthorizationError = 14,
WARNINGNoCertificateAvailable = 15,
WARNINGNoContractMatchingPCIDFound = 16,
WARNINGPowerToleranceNotConfirmed = 17,
WARNINGScheduleRenegotiationFailed = 18,
WARNINGStandbyNotAllowed = 19,
WARNINGWPT = 20,
FAILED = 21,
FAILEDAssociationError = 22,
FAILEDContactorError = 23,
FAILEDEVPowerProfileInvalid = 24,
FAILEDEVPowerProfileViolation = 25,
FAILEDMeteringSignatureNotValid = 26,
FAILEDNoEnergyTransferServiceSelected = 27,
FAILEDNoServiceRenegotiationSupported = 28,
FAILEDPauseNotAllowed = 29,
FAILEDPowerDeliveryNotApplied = 30,
FAILEDPowerToleranceNotConfirmed = 31,
FAILEDScheduleRenegotiation = 32,
FAILEDScheduleSelectionInvalid = 33,
FAILEDSequenceError = 34,
FAILEDServiceIDInvalid = 35,
FAILEDServiceSelectionInvalid = 36,
FAILEDSignatureError = 37,
FAILEDUnknownSession = 38,
FAILEDWrongChargeParameter = 39,
}
impl ResponseCode {
pub const WIDTH: u32 = 6;
pub const ALL: [Self; 40] = [
Self::OK,
Self::OKCertificateExpiresSoon,
Self::OKNewSessionEstablished,
Self::OKOldSessionJoined,
Self::OKPowerToleranceConfirmed,
Self::WARNINGAuthorizationSelectionInvalid,
Self::WARNINGCertificateExpired,
Self::WARNINGCertificateNotYetValid,
Self::WARNINGCertificateRevoked,
Self::WARNINGCertificateValidationError,
Self::WARNINGChallengeInvalid,
Self::WARNINGEIMAuthorizationFailure,
Self::WARNINGEMSPUnknown,
Self::WARNINGEVPowerProfileViolation,
Self::WARNINGGeneralPnCAuthorizationError,
Self::WARNINGNoCertificateAvailable,
Self::WARNINGNoContractMatchingPCIDFound,
Self::WARNINGPowerToleranceNotConfirmed,
Self::WARNINGScheduleRenegotiationFailed,
Self::WARNINGStandbyNotAllowed,
Self::WARNINGWPT,
Self::FAILED,
Self::FAILEDAssociationError,
Self::FAILEDContactorError,
Self::FAILEDEVPowerProfileInvalid,
Self::FAILEDEVPowerProfileViolation,
Self::FAILEDMeteringSignatureNotValid,
Self::FAILEDNoEnergyTransferServiceSelected,
Self::FAILEDNoServiceRenegotiationSupported,
Self::FAILEDPauseNotAllowed,
Self::FAILEDPowerDeliveryNotApplied,
Self::FAILEDPowerToleranceNotConfirmed,
Self::FAILEDScheduleRenegotiation,
Self::FAILEDScheduleSelectionInvalid,
Self::FAILEDSequenceError,
Self::FAILEDServiceIDInvalid,
Self::FAILEDServiceSelectionInvalid,
Self::FAILEDSignatureError,
Self::FAILEDUnknownSession,
Self::FAILEDWrongChargeParameter,
];
#[must_use]
pub const fn as_index(self) -> u64 {
self as u64
}
pub const fn from_index(index: u64) -> ExiResult<Self> {
Ok(match index {
0 => Self::OK,
1 => Self::OKCertificateExpiresSoon,
2 => Self::OKNewSessionEstablished,
3 => Self::OKOldSessionJoined,
4 => Self::OKPowerToleranceConfirmed,
5 => Self::WARNINGAuthorizationSelectionInvalid,
6 => Self::WARNINGCertificateExpired,
7 => Self::WARNINGCertificateNotYetValid,
8 => Self::WARNINGCertificateRevoked,
9 => Self::WARNINGCertificateValidationError,
10 => Self::WARNINGChallengeInvalid,
11 => Self::WARNINGEIMAuthorizationFailure,
12 => Self::WARNINGEMSPUnknown,
13 => Self::WARNINGEVPowerProfileViolation,
14 => Self::WARNINGGeneralPnCAuthorizationError,
15 => Self::WARNINGNoCertificateAvailable,
16 => Self::WARNINGNoContractMatchingPCIDFound,
17 => Self::WARNINGPowerToleranceNotConfirmed,
18 => Self::WARNINGScheduleRenegotiationFailed,
19 => Self::WARNINGStandbyNotAllowed,
20 => Self::WARNINGWPT,
21 => Self::FAILED,
22 => Self::FAILEDAssociationError,
23 => Self::FAILEDContactorError,
24 => Self::FAILEDEVPowerProfileInvalid,
25 => Self::FAILEDEVPowerProfileViolation,
26 => Self::FAILEDMeteringSignatureNotValid,
27 => Self::FAILEDNoEnergyTransferServiceSelected,
28 => Self::FAILEDNoServiceRenegotiationSupported,
29 => Self::FAILEDPauseNotAllowed,
30 => Self::FAILEDPowerDeliveryNotApplied,
31 => Self::FAILEDPowerToleranceNotConfirmed,
32 => Self::FAILEDScheduleRenegotiation,
33 => Self::FAILEDScheduleSelectionInvalid,
34 => Self::FAILEDSequenceError,
35 => Self::FAILEDServiceIDInvalid,
36 => Self::FAILEDServiceSelectionInvalid,
37 => Self::FAILEDSignatureError,
38 => Self::FAILEDUnknownSession,
39 => Self::FAILEDWrongChargeParameter,
_ => return Err(ExiError::UnknownEnumValue),
})
}
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::OK => "OK",
Self::OKCertificateExpiresSoon => "OK_CertificateExpiresSoon",
Self::OKNewSessionEstablished => "OK_NewSessionEstablished",
Self::OKOldSessionJoined => "OK_OldSessionJoined",
Self::OKPowerToleranceConfirmed => "OK_PowerToleranceConfirmed",
Self::WARNINGAuthorizationSelectionInvalid => "WARNING_AuthorizationSelectionInvalid",
Self::WARNINGCertificateExpired => "WARNING_CertificateExpired",
Self::WARNINGCertificateNotYetValid => "WARNING_CertificateNotYetValid",
Self::WARNINGCertificateRevoked => "WARNING_CertificateRevoked",
Self::WARNINGCertificateValidationError => "WARNING_CertificateValidationError",
Self::WARNINGChallengeInvalid => "WARNING_ChallengeInvalid",
Self::WARNINGEIMAuthorizationFailure => "WARNING_EIMAuthorizationFailure",
Self::WARNINGEMSPUnknown => "WARNING_eMSPUnknown",
Self::WARNINGEVPowerProfileViolation => "WARNING_EVPowerProfileViolation",
Self::WARNINGGeneralPnCAuthorizationError => "WARNING_GeneralPnCAuthorizationError",
Self::WARNINGNoCertificateAvailable => "WARNING_NoCertificateAvailable",
Self::WARNINGNoContractMatchingPCIDFound => "WARNING_NoContractMatchingPCIDFound",
Self::WARNINGPowerToleranceNotConfirmed => "WARNING_PowerToleranceNotConfirmed",
Self::WARNINGScheduleRenegotiationFailed => "WARNING_ScheduleRenegotiationFailed",
Self::WARNINGStandbyNotAllowed => "WARNING_StandbyNotAllowed",
Self::WARNINGWPT => "WARNING_WPT",
Self::FAILED => "FAILED",
Self::FAILEDAssociationError => "FAILED_AssociationError",
Self::FAILEDContactorError => "FAILED_ContactorError",
Self::FAILEDEVPowerProfileInvalid => "FAILED_EVPowerProfileInvalid",
Self::FAILEDEVPowerProfileViolation => "FAILED_EVPowerProfileViolation",
Self::FAILEDMeteringSignatureNotValid => "FAILED_MeteringSignatureNotValid",
Self::FAILEDNoEnergyTransferServiceSelected => "FAILED_NoEnergyTransferServiceSelected",
Self::FAILEDNoServiceRenegotiationSupported => "FAILED_NoServiceRenegotiationSupported",
Self::FAILEDPauseNotAllowed => "FAILED_PauseNotAllowed",
Self::FAILEDPowerDeliveryNotApplied => "FAILED_PowerDeliveryNotApplied",
Self::FAILEDPowerToleranceNotConfirmed => "FAILED_PowerToleranceNotConfirmed",
Self::FAILEDScheduleRenegotiation => "FAILED_ScheduleRenegotiation",
Self::FAILEDScheduleSelectionInvalid => "FAILED_ScheduleSelectionInvalid",
Self::FAILEDSequenceError => "FAILED_SequenceError",
Self::FAILEDServiceIDInvalid => "FAILED_ServiceIDInvalid",
Self::FAILEDServiceSelectionInvalid => "FAILED_ServiceSelectionInvalid",
Self::FAILEDSignatureError => "FAILED_SignatureError",
Self::FAILEDUnknownSession => "FAILED_UnknownSession",
Self::FAILEDWrongChargeParameter => "FAILED_WrongChargeParameter",
}
}
}
impl ResponseCode {
#[must_use]
pub const fn is_ok(self) -> bool {
matches!(
self,
Self::OK
| Self::OKCertificateExpiresSoon
| Self::OKNewSessionEstablished
| Self::OKOldSessionJoined
| Self::OKPowerToleranceConfirmed
)
}
#[must_use]
pub const fn is_warning(self) -> bool {
matches!(
self,
Self::WARNINGAuthorizationSelectionInvalid
| Self::WARNINGCertificateExpired
| Self::WARNINGCertificateNotYetValid
| Self::WARNINGCertificateRevoked
| Self::WARNINGCertificateValidationError
| Self::WARNINGChallengeInvalid
| Self::WARNINGEIMAuthorizationFailure
| Self::WARNINGEMSPUnknown
| Self::WARNINGEVPowerProfileViolation
| Self::WARNINGGeneralPnCAuthorizationError
| Self::WARNINGNoCertificateAvailable
| Self::WARNINGNoContractMatchingPCIDFound
| Self::WARNINGPowerToleranceNotConfirmed
| Self::WARNINGScheduleRenegotiationFailed
| Self::WARNINGStandbyNotAllowed
| Self::WARNINGWPT
)
}
#[must_use]
pub const fn is_failure(self) -> bool {
matches!(
self,
Self::FAILED
| Self::FAILEDAssociationError
| Self::FAILEDContactorError
| Self::FAILEDEVPowerProfileInvalid
| Self::FAILEDEVPowerProfileViolation
| Self::FAILEDMeteringSignatureNotValid
| Self::FAILEDNoEnergyTransferServiceSelected
| Self::FAILEDNoServiceRenegotiationSupported
| Self::FAILEDPauseNotAllowed
| Self::FAILEDPowerDeliveryNotApplied
| Self::FAILEDPowerToleranceNotConfirmed
| Self::FAILEDScheduleRenegotiation
| Self::FAILEDScheduleSelectionInvalid
| Self::FAILEDSequenceError
| Self::FAILEDServiceIDInvalid
| Self::FAILEDServiceSelectionInvalid
| Self::FAILEDSignatureError
| Self::FAILEDUnknownSession
| Self::FAILEDWrongChargeParameter
)
}
}
pub const DOCUMENT_WIDTH: u32 = 5;
pub const FRAGMENT_WIDTH: u32 = 7;
pub const FRAGMENT_ED_CODE: u64 = 94;
pub const XMLDSIG_FRAGMENT_WIDTH: u32 = 6;
pub const XMLDSIG_FRAGMENT_ED_CODE: u64 = 46;
impl CLReqControlMode {
pub const DOCUMENT_CODE: u64 = 0;
}
impl crate::exi::ExiDocument for CLReqControlMode {
fn to_slice(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::DOCUMENT_CODE, DOCUMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.finish()
}
fn from_bytes(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::DOCUMENT_CODE, DOCUMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.finish()?;
Ok(value)
}
}
impl CLResControlMode {
pub const DOCUMENT_CODE: u64 = 1;
}
impl crate::exi::ExiDocument for CLResControlMode {
fn to_slice(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::DOCUMENT_CODE, DOCUMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.finish()
}
fn from_bytes(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::DOCUMENT_CODE, DOCUMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.finish()?;
Ok(value)
}
}
impl CanonicalizationMethod {
pub const DOCUMENT_CODE: u64 = 2;
}
impl crate::exi::ExiDocument for CanonicalizationMethod {
fn to_slice(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::DOCUMENT_CODE, DOCUMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.finish()
}
fn from_bytes(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::DOCUMENT_CODE, DOCUMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.finish()?;
Ok(value)
}
}
impl DigestMethod {
pub const DOCUMENT_CODE: u64 = 4;
}
impl crate::exi::ExiDocument for DigestMethod {
fn to_slice(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::DOCUMENT_CODE, DOCUMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.finish()
}
fn from_bytes(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::DOCUMENT_CODE, DOCUMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.finish()?;
Ok(value)
}
}
impl Manifest {
pub const DOCUMENT_CODE: u64 = 9;
}
impl crate::exi::ExiDocument for Manifest {
fn to_slice(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::DOCUMENT_CODE, DOCUMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.finish()
}
fn from_bytes(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::DOCUMENT_CODE, DOCUMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.finish()?;
Ok(value)
}
}
impl RSAKeyValue {
pub const DOCUMENT_CODE: u64 = 13;
}
impl crate::exi::ExiDocument for RSAKeyValue {
fn to_slice(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::DOCUMENT_CODE, DOCUMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.finish()
}
fn from_bytes(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::DOCUMENT_CODE, DOCUMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.finish()?;
Ok(value)
}
}
impl Reference {
pub const DOCUMENT_CODE: u64 = 14;
}
impl crate::exi::ExiDocument for Reference {
fn to_slice(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::DOCUMENT_CODE, DOCUMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.finish()
}
fn from_bytes(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::DOCUMENT_CODE, DOCUMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.finish()?;
Ok(value)
}
}
impl RetrievalMethod {
pub const DOCUMENT_CODE: u64 = 15;
}
impl crate::exi::ExiDocument for RetrievalMethod {
fn to_slice(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::DOCUMENT_CODE, DOCUMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.finish()
}
fn from_bytes(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::DOCUMENT_CODE, DOCUMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.finish()?;
Ok(value)
}
}
impl Signature {
pub const DOCUMENT_CODE: u64 = 17;
}
impl crate::exi::ExiDocument for Signature {
fn to_slice(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::DOCUMENT_CODE, DOCUMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.finish()
}
fn from_bytes(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::DOCUMENT_CODE, DOCUMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.finish()?;
Ok(value)
}
}
impl SignatureMethod {
pub const DOCUMENT_CODE: u64 = 18;
}
impl crate::exi::ExiDocument for SignatureMethod {
fn to_slice(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::DOCUMENT_CODE, DOCUMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.finish()
}
fn from_bytes(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::DOCUMENT_CODE, DOCUMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.finish()?;
Ok(value)
}
}
impl SignatureValue {
pub const DOCUMENT_CODE: u64 = 21;
}
impl crate::exi::ExiDocument for SignatureValue {
fn to_slice(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::DOCUMENT_CODE, DOCUMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.finish()
}
fn from_bytes(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::DOCUMENT_CODE, DOCUMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.finish()?;
Ok(value)
}
}
impl SignedInfo {
pub const DOCUMENT_CODE: u64 = 22;
}
impl crate::exi::ExiDocument for SignedInfo {
fn to_slice(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::DOCUMENT_CODE, DOCUMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.finish()
}
fn from_bytes(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::DOCUMENT_CODE, DOCUMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.finish()?;
Ok(value)
}
}
impl Transform {
pub const DOCUMENT_CODE: u64 = 23;
}
impl crate::exi::ExiDocument for Transform {
fn to_slice(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::DOCUMENT_CODE, DOCUMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.finish()
}
fn from_bytes(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::DOCUMENT_CODE, DOCUMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.finish()?;
Ok(value)
}
}
impl Transforms {
pub const DOCUMENT_CODE: u64 = 24;
}
impl crate::exi::ExiDocument for Transforms {
fn to_slice(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::DOCUMENT_CODE, DOCUMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.finish()
}
fn from_bytes(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::DOCUMENT_CODE, DOCUMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.finish()?;
Ok(value)
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[non_exhaustive]
pub enum Document {
CLReqControlMode(CLReqControlMode),
CLResControlMode(CLResControlMode),
CanonicalizationMethod(CanonicalizationMethod),
DigestMethod(DigestMethod),
Manifest(Manifest),
RSAKeyValue(RSAKeyValue),
Reference(Reference),
RetrievalMethod(RetrievalMethod),
Signature(Signature),
SignatureMethod(SignatureMethod),
SignatureValue(SignatureValue),
SignedInfo(SignedInfo),
Transform(Transform),
Transforms(Transforms),
}
impl Document {
#[must_use]
pub const fn name(&self) -> &'static str {
match self {
Self::CLReqControlMode(_) => "CLReqControlMode",
Self::CLResControlMode(_) => "CLResControlMode",
Self::CanonicalizationMethod(_) => "CanonicalizationMethod",
Self::DigestMethod(_) => "DigestMethod",
Self::Manifest(_) => "Manifest",
Self::RSAKeyValue(_) => "RSAKeyValue",
Self::Reference(_) => "Reference",
Self::RetrievalMethod(_) => "RetrievalMethod",
Self::Signature(_) => "Signature",
Self::SignatureMethod(_) => "SignatureMethod",
Self::SignatureValue(_) => "SignatureValue",
Self::SignedInfo(_) => "SignedInfo",
Self::Transform(_) => "Transform",
Self::Transforms(_) => "Transforms",
}
}
#[must_use]
pub const fn code(&self) -> u64 {
match self {
Self::CLReqControlMode(_) => 0,
Self::CLResControlMode(_) => 1,
Self::CanonicalizationMethod(_) => 2,
Self::DigestMethod(_) => 4,
Self::Manifest(_) => 9,
Self::RSAKeyValue(_) => 13,
Self::Reference(_) => 14,
Self::RetrievalMethod(_) => 15,
Self::Signature(_) => 17,
Self::SignatureMethod(_) => 18,
Self::SignatureValue(_) => 21,
Self::SignedInfo(_) => 22,
Self::Transform(_) => 23,
Self::Transforms(_) => 24,
}
}
}
impl crate::exi::ExiDocument for Document {
fn to_slice(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(self.code(), DOCUMENT_WIDTH)?;
match self {
Self::CLReqControlMode(m) => m.encode_body(&mut e)?,
Self::CLResControlMode(m) => m.encode_body(&mut e)?,
Self::CanonicalizationMethod(m) => m.encode_body(&mut e)?,
Self::DigestMethod(m) => m.encode_body(&mut e)?,
Self::Manifest(m) => m.encode_body(&mut e)?,
Self::RSAKeyValue(m) => m.encode_body(&mut e)?,
Self::Reference(m) => m.encode_body(&mut e)?,
Self::RetrievalMethod(m) => m.encode_body(&mut e)?,
Self::Signature(m) => m.encode_body(&mut e)?,
Self::SignatureMethod(m) => m.encode_body(&mut e)?,
Self::SignatureValue(m) => m.encode_body(&mut e)?,
Self::SignedInfo(m) => m.encode_body(&mut e)?,
Self::Transform(m) => m.encode_body(&mut e)?,
Self::Transforms(m) => m.encode_body(&mut e)?,
}
e.finish()
}
fn from_bytes(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
let value = match d.event(DOCUMENT_WIDTH)? {
0 => Self::CLReqControlMode(CLReqControlMode::decode_body(&mut d)?),
1 => Self::CLResControlMode(CLResControlMode::decode_body(&mut d)?),
2 => Self::CanonicalizationMethod(CanonicalizationMethod::decode_body(&mut d)?),
4 => Self::DigestMethod(DigestMethod::decode_body(&mut d)?),
9 => Self::Manifest(Manifest::decode_body(&mut d)?),
13 => Self::RSAKeyValue(RSAKeyValue::decode_body(&mut d)?),
14 => Self::Reference(Reference::decode_body(&mut d)?),
15 => Self::RetrievalMethod(RetrievalMethod::decode_body(&mut d)?),
17 => Self::Signature(Signature::decode_body(&mut d)?),
18 => Self::SignatureMethod(SignatureMethod::decode_body(&mut d)?),
21 => Self::SignatureValue(SignatureValue::decode_body(&mut d)?),
22 => Self::SignedInfo(SignedInfo::decode_body(&mut d)?),
23 => Self::Transform(Transform::decode_body(&mut d)?),
24 => Self::Transforms(Transforms::decode_body(&mut d)?),
_ => return Err(ExiError::UnknownEventCode),
};
d.finish()?;
Ok(value)
}
}
impl Document {
#[must_use]
pub const fn fragment_code(&self) -> u64 {
match self {
Self::CLReqControlMode(_) => 6,
Self::CLResControlMode(_) => 7,
Self::CanonicalizationMethod(_) => 8,
Self::DigestMethod(_) => 15,
Self::Manifest(_) => 34,
Self::RSAKeyValue(_) => 56,
Self::Reference(_) => 58,
Self::RetrievalMethod(_) => 63,
Self::Signature(_) => 69,
Self::SignatureMethod(_) => 70,
Self::SignatureValue(_) => 73,
Self::SignedInfo(_) => 74,
Self::Transform(_) => 80,
Self::Transforms(_) => 81,
}
}
pub fn encode_fragment(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(self.fragment_code(), FRAGMENT_WIDTH)?;
match self {
Self::CLReqControlMode(m) => m.encode_body(&mut e)?,
Self::CLResControlMode(m) => m.encode_body(&mut e)?,
Self::CanonicalizationMethod(m) => m.encode_body(&mut e)?,
Self::DigestMethod(m) => m.encode_body(&mut e)?,
Self::Manifest(m) => m.encode_body(&mut e)?,
Self::RSAKeyValue(m) => m.encode_body(&mut e)?,
Self::Reference(m) => m.encode_body(&mut e)?,
Self::RetrievalMethod(m) => m.encode_body(&mut e)?,
Self::Signature(m) => m.encode_body(&mut e)?,
Self::SignatureMethod(m) => m.encode_body(&mut e)?,
Self::SignatureValue(m) => m.encode_body(&mut e)?,
Self::SignedInfo(m) => m.encode_body(&mut e)?,
Self::Transform(m) => m.encode_body(&mut e)?,
Self::Transforms(m) => m.encode_body(&mut e)?,
}
e.event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
e.finish()
}
pub fn to_fragment(&self) -> ExiResult<Vec<u8>> {
crate::exi::encode_growing(|buf| self.encode_fragment(buf))
}
pub fn from_fragment(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
let value = match d.event(FRAGMENT_WIDTH)? {
6 => Self::CLReqControlMode(CLReqControlMode::decode_body(&mut d)?),
7 => Self::CLResControlMode(CLResControlMode::decode_body(&mut d)?),
8 => Self::CanonicalizationMethod(CanonicalizationMethod::decode_body(&mut d)?),
15 => Self::DigestMethod(DigestMethod::decode_body(&mut d)?),
34 => Self::Manifest(Manifest::decode_body(&mut d)?),
56 => Self::RSAKeyValue(RSAKeyValue::decode_body(&mut d)?),
58 => Self::Reference(Reference::decode_body(&mut d)?),
63 => Self::RetrievalMethod(RetrievalMethod::decode_body(&mut d)?),
69 => Self::Signature(Signature::decode_body(&mut d)?),
70 => Self::SignatureMethod(SignatureMethod::decode_body(&mut d)?),
73 => Self::SignatureValue(SignatureValue::decode_body(&mut d)?),
74 => Self::SignedInfo(SignedInfo::decode_body(&mut d)?),
80 => Self::Transform(Transform::decode_body(&mut d)?),
81 => Self::Transforms(Transforms::decode_body(&mut d)?),
_ => return Err(ExiError::UnknownEventCode),
};
d.expect_event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
d.finish()?;
Ok(value)
}
}
impl CLReqControlMode {
pub const FRAGMENT_CODE: u64 = 6;
pub fn encode_fragment(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
e.finish()
}
pub fn to_fragment(&self) -> ExiResult<Vec<u8>> {
crate::exi::encode_growing(|buf| self.encode_fragment(buf))
}
pub fn from_fragment(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.expect_event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
d.finish()?;
Ok(value)
}
}
impl CLResControlMode {
pub const FRAGMENT_CODE: u64 = 7;
pub fn encode_fragment(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
e.finish()
}
pub fn to_fragment(&self) -> ExiResult<Vec<u8>> {
crate::exi::encode_growing(|buf| self.encode_fragment(buf))
}
pub fn from_fragment(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.expect_event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
d.finish()?;
Ok(value)
}
}
impl CanonicalizationMethod {
pub const FRAGMENT_CODE: u64 = 8;
pub fn encode_fragment(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
e.finish()
}
pub fn to_fragment(&self) -> ExiResult<Vec<u8>> {
crate::exi::encode_growing(|buf| self.encode_fragment(buf))
}
pub fn from_fragment(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.expect_event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
d.finish()?;
Ok(value)
}
}
impl CanonicalizationMethod {
pub const XMLDSIG_FRAGMENT_CODE: u64 = 0;
pub fn encode_xmldsig_fragment(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::XMLDSIG_FRAGMENT_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.event(XMLDSIG_FRAGMENT_ED_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
e.finish()
}
pub fn to_xmldsig_fragment(&self) -> ExiResult<Vec<u8>> {
crate::exi::encode_growing(|buf| self.encode_xmldsig_fragment(buf))
}
pub fn from_xmldsig_fragment(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::XMLDSIG_FRAGMENT_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.expect_event(XMLDSIG_FRAGMENT_ED_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
d.finish()?;
Ok(value)
}
}
impl DigestMethod {
pub const FRAGMENT_CODE: u64 = 15;
pub fn encode_fragment(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
e.finish()
}
pub fn to_fragment(&self) -> ExiResult<Vec<u8>> {
crate::exi::encode_growing(|buf| self.encode_fragment(buf))
}
pub fn from_fragment(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.expect_event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
d.finish()?;
Ok(value)
}
}
impl DigestMethod {
pub const XMLDSIG_FRAGMENT_CODE: u64 = 2;
pub fn encode_xmldsig_fragment(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::XMLDSIG_FRAGMENT_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.event(XMLDSIG_FRAGMENT_ED_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
e.finish()
}
pub fn to_xmldsig_fragment(&self) -> ExiResult<Vec<u8>> {
crate::exi::encode_growing(|buf| self.encode_xmldsig_fragment(buf))
}
pub fn from_xmldsig_fragment(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::XMLDSIG_FRAGMENT_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.expect_event(XMLDSIG_FRAGMENT_ED_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
d.finish()?;
Ok(value)
}
}
impl DisplayParameters {
pub const FRAGMENT_CODE: u64 = 17;
pub fn encode_fragment(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
e.finish()
}
pub fn to_fragment(&self) -> ExiResult<Vec<u8>> {
crate::exi::encode_growing(|buf| self.encode_fragment(buf))
}
pub fn from_fragment(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.expect_event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
d.finish()?;
Ok(value)
}
}
impl EVSEStatus {
pub const FRAGMENT_CODE: u64 = 21;
pub fn encode_fragment(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
e.finish()
}
pub fn to_fragment(&self) -> ExiResult<Vec<u8>> {
crate::exi::encode_growing(|buf| self.encode_fragment(buf))
}
pub fn from_fragment(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.expect_event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
d.finish()?;
Ok(value)
}
}
impl MessageHeader {
pub const FRAGMENT_CODE: u64 = 28;
pub fn encode_fragment(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
e.finish()
}
pub fn to_fragment(&self) -> ExiResult<Vec<u8>> {
crate::exi::encode_growing(|buf| self.encode_fragment(buf))
}
pub fn from_fragment(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.expect_event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
d.finish()?;
Ok(value)
}
}
impl Manifest {
pub const FRAGMENT_CODE: u64 = 34;
pub fn encode_fragment(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
e.finish()
}
pub fn to_fragment(&self) -> ExiResult<Vec<u8>> {
crate::exi::encode_growing(|buf| self.encode_fragment(buf))
}
pub fn from_fragment(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.expect_event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
d.finish()?;
Ok(value)
}
}
impl Manifest {
pub const XMLDSIG_FRAGMENT_CODE: u64 = 11;
pub fn encode_xmldsig_fragment(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::XMLDSIG_FRAGMENT_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.event(XMLDSIG_FRAGMENT_ED_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
e.finish()
}
pub fn to_xmldsig_fragment(&self) -> ExiResult<Vec<u8>> {
crate::exi::encode_growing(|buf| self.encode_xmldsig_fragment(buf))
}
pub fn from_xmldsig_fragment(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::XMLDSIG_FRAGMENT_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.expect_event(XMLDSIG_FRAGMENT_ED_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
d.finish()?;
Ok(value)
}
}
impl MeterInfo {
pub const FRAGMENT_CODE: u64 = 37;
pub fn encode_fragment(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
e.finish()
}
pub fn to_fragment(&self) -> ExiResult<Vec<u8>> {
crate::exi::encode_growing(|buf| self.encode_fragment(buf))
}
pub fn from_fragment(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.expect_event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
d.finish()?;
Ok(value)
}
}
impl RSAKeyValue {
pub const FRAGMENT_CODE: u64 = 56;
pub fn encode_fragment(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
e.finish()
}
pub fn to_fragment(&self) -> ExiResult<Vec<u8>> {
crate::exi::encode_growing(|buf| self.encode_fragment(buf))
}
pub fn from_fragment(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.expect_event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
d.finish()?;
Ok(value)
}
}
impl RSAKeyValue {
pub const XMLDSIG_FRAGMENT_CODE: u64 = 21;
pub fn encode_xmldsig_fragment(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::XMLDSIG_FRAGMENT_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.event(XMLDSIG_FRAGMENT_ED_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
e.finish()
}
pub fn to_xmldsig_fragment(&self) -> ExiResult<Vec<u8>> {
crate::exi::encode_growing(|buf| self.encode_xmldsig_fragment(buf))
}
pub fn from_xmldsig_fragment(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::XMLDSIG_FRAGMENT_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.expect_event(XMLDSIG_FRAGMENT_ED_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
d.finish()?;
Ok(value)
}
}
impl Receipt {
pub const FRAGMENT_CODE: u64 = 57;
pub fn encode_fragment(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
e.finish()
}
pub fn to_fragment(&self) -> ExiResult<Vec<u8>> {
crate::exi::encode_growing(|buf| self.encode_fragment(buf))
}
pub fn from_fragment(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.expect_event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
d.finish()?;
Ok(value)
}
}
impl Reference {
pub const FRAGMENT_CODE: u64 = 58;
pub fn encode_fragment(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
e.finish()
}
pub fn to_fragment(&self) -> ExiResult<Vec<u8>> {
crate::exi::encode_growing(|buf| self.encode_fragment(buf))
}
pub fn from_fragment(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.expect_event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
d.finish()?;
Ok(value)
}
}
impl Reference {
pub const XMLDSIG_FRAGMENT_CODE: u64 = 22;
pub fn encode_xmldsig_fragment(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::XMLDSIG_FRAGMENT_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.event(XMLDSIG_FRAGMENT_ED_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
e.finish()
}
pub fn to_xmldsig_fragment(&self) -> ExiResult<Vec<u8>> {
crate::exi::encode_growing(|buf| self.encode_xmldsig_fragment(buf))
}
pub fn from_xmldsig_fragment(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::XMLDSIG_FRAGMENT_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.expect_event(XMLDSIG_FRAGMENT_ED_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
d.finish()?;
Ok(value)
}
}
impl RetrievalMethod {
pub const FRAGMENT_CODE: u64 = 63;
pub fn encode_fragment(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
e.finish()
}
pub fn to_fragment(&self) -> ExiResult<Vec<u8>> {
crate::exi::encode_growing(|buf| self.encode_fragment(buf))
}
pub fn from_fragment(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.expect_event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
d.finish()?;
Ok(value)
}
}
impl RetrievalMethod {
pub const XMLDSIG_FRAGMENT_CODE: u64 = 23;
pub fn encode_xmldsig_fragment(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::XMLDSIG_FRAGMENT_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.event(XMLDSIG_FRAGMENT_ED_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
e.finish()
}
pub fn to_xmldsig_fragment(&self) -> ExiResult<Vec<u8>> {
crate::exi::encode_growing(|buf| self.encode_xmldsig_fragment(buf))
}
pub fn from_xmldsig_fragment(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::XMLDSIG_FRAGMENT_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.expect_event(XMLDSIG_FRAGMENT_ED_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
d.finish()?;
Ok(value)
}
}
impl Signature {
pub const FRAGMENT_CODE: u64 = 69;
pub fn encode_fragment(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
e.finish()
}
pub fn to_fragment(&self) -> ExiResult<Vec<u8>> {
crate::exi::encode_growing(|buf| self.encode_fragment(buf))
}
pub fn from_fragment(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.expect_event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
d.finish()?;
Ok(value)
}
}
impl Signature {
pub const XMLDSIG_FRAGMENT_CODE: u64 = 27;
pub fn encode_xmldsig_fragment(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::XMLDSIG_FRAGMENT_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.event(XMLDSIG_FRAGMENT_ED_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
e.finish()
}
pub fn to_xmldsig_fragment(&self) -> ExiResult<Vec<u8>> {
crate::exi::encode_growing(|buf| self.encode_xmldsig_fragment(buf))
}
pub fn from_xmldsig_fragment(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::XMLDSIG_FRAGMENT_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.expect_event(XMLDSIG_FRAGMENT_ED_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
d.finish()?;
Ok(value)
}
}
impl SignatureMethod {
pub const FRAGMENT_CODE: u64 = 70;
pub fn encode_fragment(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
e.finish()
}
pub fn to_fragment(&self) -> ExiResult<Vec<u8>> {
crate::exi::encode_growing(|buf| self.encode_fragment(buf))
}
pub fn from_fragment(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.expect_event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
d.finish()?;
Ok(value)
}
}
impl SignatureMethod {
pub const XMLDSIG_FRAGMENT_CODE: u64 = 28;
pub fn encode_xmldsig_fragment(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::XMLDSIG_FRAGMENT_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.event(XMLDSIG_FRAGMENT_ED_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
e.finish()
}
pub fn to_xmldsig_fragment(&self) -> ExiResult<Vec<u8>> {
crate::exi::encode_growing(|buf| self.encode_xmldsig_fragment(buf))
}
pub fn from_xmldsig_fragment(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::XMLDSIG_FRAGMENT_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.expect_event(XMLDSIG_FRAGMENT_ED_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
d.finish()?;
Ok(value)
}
}
impl SignatureValue {
pub const FRAGMENT_CODE: u64 = 73;
pub fn encode_fragment(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
e.finish()
}
pub fn to_fragment(&self) -> ExiResult<Vec<u8>> {
crate::exi::encode_growing(|buf| self.encode_fragment(buf))
}
pub fn from_fragment(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.expect_event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
d.finish()?;
Ok(value)
}
}
impl SignatureValue {
pub const XMLDSIG_FRAGMENT_CODE: u64 = 31;
pub fn encode_xmldsig_fragment(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::XMLDSIG_FRAGMENT_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.event(XMLDSIG_FRAGMENT_ED_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
e.finish()
}
pub fn to_xmldsig_fragment(&self) -> ExiResult<Vec<u8>> {
crate::exi::encode_growing(|buf| self.encode_xmldsig_fragment(buf))
}
pub fn from_xmldsig_fragment(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::XMLDSIG_FRAGMENT_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.expect_event(XMLDSIG_FRAGMENT_ED_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
d.finish()?;
Ok(value)
}
}
impl SignedInfo {
pub const FRAGMENT_CODE: u64 = 74;
pub fn encode_fragment(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
e.finish()
}
pub fn to_fragment(&self) -> ExiResult<Vec<u8>> {
crate::exi::encode_growing(|buf| self.encode_fragment(buf))
}
pub fn from_fragment(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.expect_event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
d.finish()?;
Ok(value)
}
}
impl SignedInfo {
pub const XMLDSIG_FRAGMENT_CODE: u64 = 32;
pub fn encode_xmldsig_fragment(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::XMLDSIG_FRAGMENT_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.event(XMLDSIG_FRAGMENT_ED_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
e.finish()
}
pub fn to_xmldsig_fragment(&self) -> ExiResult<Vec<u8>> {
crate::exi::encode_growing(|buf| self.encode_xmldsig_fragment(buf))
}
pub fn from_xmldsig_fragment(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::XMLDSIG_FRAGMENT_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.expect_event(XMLDSIG_FRAGMENT_ED_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
d.finish()?;
Ok(value)
}
}
impl DetailedTax {
pub const FRAGMENT_CODE: u64 = 76;
pub fn encode_fragment(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
e.finish()
}
pub fn to_fragment(&self) -> ExiResult<Vec<u8>> {
crate::exi::encode_growing(|buf| self.encode_fragment(buf))
}
pub fn from_fragment(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.expect_event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
d.finish()?;
Ok(value)
}
}
impl Transform {
pub const FRAGMENT_CODE: u64 = 80;
pub fn encode_fragment(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
e.finish()
}
pub fn to_fragment(&self) -> ExiResult<Vec<u8>> {
crate::exi::encode_growing(|buf| self.encode_fragment(buf))
}
pub fn from_fragment(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.expect_event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
d.finish()?;
Ok(value)
}
}
impl Transform {
pub const XMLDSIG_FRAGMENT_CODE: u64 = 33;
pub fn encode_xmldsig_fragment(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::XMLDSIG_FRAGMENT_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.event(XMLDSIG_FRAGMENT_ED_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
e.finish()
}
pub fn to_xmldsig_fragment(&self) -> ExiResult<Vec<u8>> {
crate::exi::encode_growing(|buf| self.encode_xmldsig_fragment(buf))
}
pub fn from_xmldsig_fragment(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::XMLDSIG_FRAGMENT_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.expect_event(XMLDSIG_FRAGMENT_ED_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
d.finish()?;
Ok(value)
}
}
impl Transforms {
pub const FRAGMENT_CODE: u64 = 81;
pub fn encode_fragment(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
e.finish()
}
pub fn to_fragment(&self) -> ExiResult<Vec<u8>> {
crate::exi::encode_growing(|buf| self.encode_fragment(buf))
}
pub fn from_fragment(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.expect_event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
d.finish()?;
Ok(value)
}
}
impl Transforms {
pub const XMLDSIG_FRAGMENT_CODE: u64 = 34;
pub fn encode_xmldsig_fragment(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::XMLDSIG_FRAGMENT_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.event(XMLDSIG_FRAGMENT_ED_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
e.finish()
}
pub fn to_xmldsig_fragment(&self) -> ExiResult<Vec<u8>> {
crate::exi::encode_growing(|buf| self.encode_xmldsig_fragment(buf))
}
pub fn from_xmldsig_fragment(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::XMLDSIG_FRAGMENT_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.expect_event(XMLDSIG_FRAGMENT_ED_CODE, XMLDSIG_FRAGMENT_WIDTH)?;
d.finish()?;
Ok(value)
}
}