#![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_MsgDef";
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ACEVChargeParameter {
pub departure_time: Option<u32>,
pub e_amount: PhysicalValue,
pub ev_max_voltage: PhysicalValue,
pub ev_max_current: PhysicalValue,
pub ev_min_current: PhysicalValue,
}
impl ACEVChargeParameter {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4, 5],
width: &[2, 1, 1, 1, 1, 1],
repeat_width: &[0, 0, 0, 0, 0],
min: &[0, 1, 1, 1, 1],
max: &[1, 1, 1, 1, 1],
};
}
impl ACEVChargeParameter {
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.e_amount;
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 1);
}
{
let item = &self.ev_max_voltage;
w.start(e, 2, 0)?;
item.encode_body(e)?;
w.finish(2, 1);
}
{
let item = &self.ev_max_current;
w.start(e, 3, 0)?;
item.encode_body(e)?;
w.finish(3, 1);
}
{
let item = &self.ev_min_current;
w.start(e, 4, 0)?;
item.encode_body(e)?;
w.finish(4, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl ACEVChargeParameter {
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, .. } => {
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 = PhysicalValue::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
let value = PhysicalValue::decode_body(d)?;
f_2 = Some(value);
}
Step::Item { index: 3, .. } => {
let value = PhysicalValue::decode_body(d)?;
f_3 = Some(value);
}
Step::Item { index: 4, .. } => {
let value = PhysicalValue::decode_body(d)?;
f_4 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
departure_time: f_0,
e_amount: f_1.ok_or(ExiError::MissingElement)?,
ev_max_voltage: f_2.ok_or(ExiError::MissingElement)?,
ev_max_current: f_3.ok_or(ExiError::MissingElement)?,
ev_min_current: f_4.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ACEVSEChargeParameter {
pub ac_evse_status: ACEVSEStatus,
pub evse_nominal_voltage: PhysicalValue,
pub evse_max_current: PhysicalValue,
}
impl ACEVSEChargeParameter {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3],
width: &[1, 1, 1, 1],
repeat_width: &[0, 0, 0],
min: &[1, 1, 1],
max: &[1, 1, 1],
};
}
impl ACEVSEChargeParameter {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.ac_evse_status;
w.start(e, 0, 0)?;
item.encode_body(e)?;
w.finish(0, 1);
}
{
let item = &self.evse_nominal_voltage;
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 1);
}
{
let item = &self.evse_max_current;
w.start(e, 2, 0)?;
item.encode_body(e)?;
w.finish(2, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl ACEVSEChargeParameter {
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 = ACEVSEStatus::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = PhysicalValue::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
let value = PhysicalValue::decode_body(d)?;
f_2 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
ac_evse_status: f_0.ok_or(ExiError::MissingElement)?,
evse_nominal_voltage: f_1.ok_or(ExiError::MissingElement)?,
evse_max_current: f_2.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ACEVSEStatus {
pub notification_max_delay: u16,
pub evse_notification: EVSENotification,
pub rcd: bool,
}
impl ACEVSEStatus {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3],
width: &[1, 1, 1, 1],
repeat_width: &[0, 0, 0],
min: &[1, 1, 1],
max: &[1, 1, 1],
};
}
impl ACEVSEStatus {
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);
}
{
let item = &self.rcd;
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 ACEVSEStatus {
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 = 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 { 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 {
notification_max_delay: f_0.ok_or(ExiError::MissingElement)?,
evse_notification: f_1.ok_or(ExiError::MissingElement)?,
rcd: f_2.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct AuthorizationReq {
pub id: Option<String>,
pub gen_challenge: Option<Vec<u8>>,
}
impl AuthorizationReq {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[2, 2, 1],
repeat_width: &[0, 0],
min: &[0, 0],
max: &[1, 1],
};
}
impl AuthorizationReq {
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(106), item, Lengths::max(65536))?;
w.finish(0, 1);
}
if let Some(item) = &self.gen_challenge {
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.binary(item, Lengths::exact(16))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl AuthorizationReq {
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(106), Lengths::max(65536))?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.binary(Lengths::exact(16))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self { id: f_0, gen_challenge: f_1 })
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct AuthorizationRes {
pub response_code: ResponseCode,
pub evse_processing: EVSEProcessing,
}
impl AuthorizationRes {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 1, 1],
repeat_width: &[0, 0],
min: &[1, 1],
max: &[1, 1],
};
}
impl AuthorizationRes {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.response_code;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), ResponseCode::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
{
let item = &self.evse_processing;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), EVSEProcessing::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl AuthorizationRes {
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 = ResponseCode::from_index(d.nbit(ResponseCode::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = EVSEProcessing::from_index(d.nbit(EVSEProcessing::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
response_code: f_0.ok_or(ExiError::MissingElement)?,
evse_processing: f_1.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct BodyBase;
impl BodyBase {
const SHAPE: Shape =
Shape { prod_before: &[0], width: &[1], repeat_width: &[], min: &[], max: &[] };
}
impl BodyBase {
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 BodyBase {
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 enum BodyChoice {
AuthorizationReq(AuthorizationReq),
AuthorizationRes(AuthorizationRes),
BodyElement(BodyBase),
CableCheckReq(CableCheckReq),
CableCheckRes(CableCheckRes),
CertificateInstallationReq(CertificateInstallationReq),
CertificateInstallationRes(CertificateInstallationRes),
CertificateUpdateReq(CertificateUpdateReq),
CertificateUpdateRes(CertificateUpdateRes),
ChargeParameterDiscoveryReq(ChargeParameterDiscoveryReq),
ChargeParameterDiscoveryRes(ChargeParameterDiscoveryRes),
ChargingStatusReq(ChargingStatusReq),
ChargingStatusRes(ChargingStatusRes),
CurrentDemandReq(CurrentDemandReq),
CurrentDemandRes(CurrentDemandRes),
MeteringReceiptReq(MeteringReceiptReq),
MeteringReceiptRes(MeteringReceiptRes),
PaymentDetailsReq(PaymentDetailsReq),
PaymentDetailsRes(PaymentDetailsRes),
PaymentServiceSelectionReq(PaymentServiceSelectionReq),
PaymentServiceSelectionRes(PaymentServiceSelectionRes),
PowerDeliveryReq(PowerDeliveryReq),
PowerDeliveryRes(PowerDeliveryRes),
PreChargeReq(PreChargeReq),
PreChargeRes(PreChargeRes),
ServiceDetailReq(ServiceDetailReq),
ServiceDetailRes(ServiceDetailRes),
ServiceDiscoveryReq(ServiceDiscoveryReq),
ServiceDiscoveryRes(ServiceDiscoveryRes),
SessionSetupReq(SessionSetupReq),
SessionSetupRes(SessionSetupRes),
SessionStopReq(SessionStopReq),
SessionStopRes(SessionStopRes),
WeldingDetectionReq(WeldingDetectionReq),
WeldingDetectionRes(WeldingDetectionRes),
}
impl BodyChoice {
#[must_use]
pub const fn name(&self) -> &'static str {
match self {
Self::AuthorizationReq(_) => "AuthorizationReq",
Self::AuthorizationRes(_) => "AuthorizationRes",
Self::BodyElement(_) => "BodyElement",
Self::CableCheckReq(_) => "CableCheckReq",
Self::CableCheckRes(_) => "CableCheckRes",
Self::CertificateInstallationReq(_) => "CertificateInstallationReq",
Self::CertificateInstallationRes(_) => "CertificateInstallationRes",
Self::CertificateUpdateReq(_) => "CertificateUpdateReq",
Self::CertificateUpdateRes(_) => "CertificateUpdateRes",
Self::ChargeParameterDiscoveryReq(_) => "ChargeParameterDiscoveryReq",
Self::ChargeParameterDiscoveryRes(_) => "ChargeParameterDiscoveryRes",
Self::ChargingStatusReq(_) => "ChargingStatusReq",
Self::ChargingStatusRes(_) => "ChargingStatusRes",
Self::CurrentDemandReq(_) => "CurrentDemandReq",
Self::CurrentDemandRes(_) => "CurrentDemandRes",
Self::MeteringReceiptReq(_) => "MeteringReceiptReq",
Self::MeteringReceiptRes(_) => "MeteringReceiptRes",
Self::PaymentDetailsReq(_) => "PaymentDetailsReq",
Self::PaymentDetailsRes(_) => "PaymentDetailsRes",
Self::PaymentServiceSelectionReq(_) => "PaymentServiceSelectionReq",
Self::PaymentServiceSelectionRes(_) => "PaymentServiceSelectionRes",
Self::PowerDeliveryReq(_) => "PowerDeliveryReq",
Self::PowerDeliveryRes(_) => "PowerDeliveryRes",
Self::PreChargeReq(_) => "PreChargeReq",
Self::PreChargeRes(_) => "PreChargeRes",
Self::ServiceDetailReq(_) => "ServiceDetailReq",
Self::ServiceDetailRes(_) => "ServiceDetailRes",
Self::ServiceDiscoveryReq(_) => "ServiceDiscoveryReq",
Self::ServiceDiscoveryRes(_) => "ServiceDiscoveryRes",
Self::SessionSetupReq(_) => "SessionSetupReq",
Self::SessionSetupRes(_) => "SessionSetupRes",
Self::SessionStopReq(_) => "SessionStopReq",
Self::SessionStopRes(_) => "SessionStopRes",
Self::WeldingDetectionReq(_) => "WeldingDetectionReq",
Self::WeldingDetectionRes(_) => "WeldingDetectionRes",
}
}
}
impl BodyChoice {
#[must_use]
pub const fn response_code(&self) -> Option<ResponseCode> {
match self {
Self::AuthorizationRes(m) => Some(m.response_code),
Self::CableCheckRes(m) => Some(m.response_code),
Self::CertificateInstallationRes(m) => Some(m.response_code),
Self::CertificateUpdateRes(m) => Some(m.response_code),
Self::ChargeParameterDiscoveryRes(m) => Some(m.response_code),
Self::ChargingStatusRes(m) => Some(m.response_code),
Self::CurrentDemandRes(m) => Some(m.response_code),
Self::MeteringReceiptRes(m) => Some(m.response_code),
Self::PaymentDetailsRes(m) => Some(m.response_code),
Self::PaymentServiceSelectionRes(m) => Some(m.response_code),
Self::PowerDeliveryRes(m) => Some(m.response_code),
Self::PreChargeRes(m) => Some(m.response_code),
Self::ServiceDetailRes(m) => Some(m.response_code),
Self::ServiceDiscoveryRes(m) => Some(m.response_code),
Self::SessionSetupRes(m) => Some(m.response_code),
Self::SessionStopRes(m) => Some(m.response_code),
Self::WeldingDetectionRes(m) => Some(m.response_code),
_ => None,
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Body {
pub choice: Option<BodyChoice>,
}
impl Body {
const SHAPE: Shape =
Shape { prod_before: &[0, 35], width: &[6, 1], repeat_width: &[0], min: &[0], max: &[1] };
}
impl Body {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
if let Some(item) = &self.choice {
match item {
BodyChoice::AuthorizationReq(value) => {
w.start_branch(e, 0, 0, 0)?;
value.encode_body(e)?;
}
BodyChoice::AuthorizationRes(value) => {
w.start_branch(e, 0, 0, 1)?;
value.encode_body(e)?;
}
BodyChoice::BodyElement(value) => {
w.start_branch(e, 0, 0, 2)?;
value.encode_body(e)?;
}
BodyChoice::CableCheckReq(value) => {
w.start_branch(e, 0, 0, 3)?;
value.encode_body(e)?;
}
BodyChoice::CableCheckRes(value) => {
w.start_branch(e, 0, 0, 4)?;
value.encode_body(e)?;
}
BodyChoice::CertificateInstallationReq(value) => {
w.start_branch(e, 0, 0, 5)?;
value.encode_body(e)?;
}
BodyChoice::CertificateInstallationRes(value) => {
w.start_branch(e, 0, 0, 6)?;
value.encode_body(e)?;
}
BodyChoice::CertificateUpdateReq(value) => {
w.start_branch(e, 0, 0, 7)?;
value.encode_body(e)?;
}
BodyChoice::CertificateUpdateRes(value) => {
w.start_branch(e, 0, 0, 8)?;
value.encode_body(e)?;
}
BodyChoice::ChargeParameterDiscoveryReq(value) => {
w.start_branch(e, 0, 0, 9)?;
value.encode_body(e)?;
}
BodyChoice::ChargeParameterDiscoveryRes(value) => {
w.start_branch(e, 0, 0, 10)?;
value.encode_body(e)?;
}
BodyChoice::ChargingStatusReq(value) => {
w.start_branch(e, 0, 0, 11)?;
value.encode_body(e)?;
}
BodyChoice::ChargingStatusRes(value) => {
w.start_branch(e, 0, 0, 12)?;
value.encode_body(e)?;
}
BodyChoice::CurrentDemandReq(value) => {
w.start_branch(e, 0, 0, 13)?;
value.encode_body(e)?;
}
BodyChoice::CurrentDemandRes(value) => {
w.start_branch(e, 0, 0, 14)?;
value.encode_body(e)?;
}
BodyChoice::MeteringReceiptReq(value) => {
w.start_branch(e, 0, 0, 15)?;
value.encode_body(e)?;
}
BodyChoice::MeteringReceiptRes(value) => {
w.start_branch(e, 0, 0, 16)?;
value.encode_body(e)?;
}
BodyChoice::PaymentDetailsReq(value) => {
w.start_branch(e, 0, 0, 17)?;
value.encode_body(e)?;
}
BodyChoice::PaymentDetailsRes(value) => {
w.start_branch(e, 0, 0, 18)?;
value.encode_body(e)?;
}
BodyChoice::PaymentServiceSelectionReq(value) => {
w.start_branch(e, 0, 0, 19)?;
value.encode_body(e)?;
}
BodyChoice::PaymentServiceSelectionRes(value) => {
w.start_branch(e, 0, 0, 20)?;
value.encode_body(e)?;
}
BodyChoice::PowerDeliveryReq(value) => {
w.start_branch(e, 0, 0, 21)?;
value.encode_body(e)?;
}
BodyChoice::PowerDeliveryRes(value) => {
w.start_branch(e, 0, 0, 22)?;
value.encode_body(e)?;
}
BodyChoice::PreChargeReq(value) => {
w.start_branch(e, 0, 0, 23)?;
value.encode_body(e)?;
}
BodyChoice::PreChargeRes(value) => {
w.start_branch(e, 0, 0, 24)?;
value.encode_body(e)?;
}
BodyChoice::ServiceDetailReq(value) => {
w.start_branch(e, 0, 0, 25)?;
value.encode_body(e)?;
}
BodyChoice::ServiceDetailRes(value) => {
w.start_branch(e, 0, 0, 26)?;
value.encode_body(e)?;
}
BodyChoice::ServiceDiscoveryReq(value) => {
w.start_branch(e, 0, 0, 27)?;
value.encode_body(e)?;
}
BodyChoice::ServiceDiscoveryRes(value) => {
w.start_branch(e, 0, 0, 28)?;
value.encode_body(e)?;
}
BodyChoice::SessionSetupReq(value) => {
w.start_branch(e, 0, 0, 29)?;
value.encode_body(e)?;
}
BodyChoice::SessionSetupRes(value) => {
w.start_branch(e, 0, 0, 30)?;
value.encode_body(e)?;
}
BodyChoice::SessionStopReq(value) => {
w.start_branch(e, 0, 0, 31)?;
value.encode_body(e)?;
}
BodyChoice::SessionStopRes(value) => {
w.start_branch(e, 0, 0, 32)?;
value.encode_body(e)?;
}
BodyChoice::WeldingDetectionReq(value) => {
w.start_branch(e, 0, 0, 33)?;
value.encode_body(e)?;
}
BodyChoice::WeldingDetectionRes(value) => {
w.start_branch(e, 0, 0, 34)?;
value.encode_body(e)?;
}
}
w.finish(0, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl Body {
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, branch, .. } => {
let value = match branch {
0 => {
let value = AuthorizationReq::decode_body(d)?;
BodyChoice::AuthorizationReq(value)
}
1 => {
let value = AuthorizationRes::decode_body(d)?;
BodyChoice::AuthorizationRes(value)
}
2 => {
let value = BodyBase::decode_body(d)?;
BodyChoice::BodyElement(value)
}
3 => {
let value = CableCheckReq::decode_body(d)?;
BodyChoice::CableCheckReq(value)
}
4 => {
let value = CableCheckRes::decode_body(d)?;
BodyChoice::CableCheckRes(value)
}
5 => {
let value = CertificateInstallationReq::decode_body(d)?;
BodyChoice::CertificateInstallationReq(value)
}
6 => {
let value = CertificateInstallationRes::decode_body(d)?;
BodyChoice::CertificateInstallationRes(value)
}
7 => {
let value = CertificateUpdateReq::decode_body(d)?;
BodyChoice::CertificateUpdateReq(value)
}
8 => {
let value = CertificateUpdateRes::decode_body(d)?;
BodyChoice::CertificateUpdateRes(value)
}
9 => {
let value = ChargeParameterDiscoveryReq::decode_body(d)?;
BodyChoice::ChargeParameterDiscoveryReq(value)
}
10 => {
let value = ChargeParameterDiscoveryRes::decode_body(d)?;
BodyChoice::ChargeParameterDiscoveryRes(value)
}
11 => {
let value = ChargingStatusReq::decode_body(d)?;
BodyChoice::ChargingStatusReq(value)
}
12 => {
let value = ChargingStatusRes::decode_body(d)?;
BodyChoice::ChargingStatusRes(value)
}
13 => {
let value = CurrentDemandReq::decode_body(d)?;
BodyChoice::CurrentDemandReq(value)
}
14 => {
let value = CurrentDemandRes::decode_body(d)?;
BodyChoice::CurrentDemandRes(value)
}
15 => {
let value = MeteringReceiptReq::decode_body(d)?;
BodyChoice::MeteringReceiptReq(value)
}
16 => {
let value = MeteringReceiptRes::decode_body(d)?;
BodyChoice::MeteringReceiptRes(value)
}
17 => {
let value = PaymentDetailsReq::decode_body(d)?;
BodyChoice::PaymentDetailsReq(value)
}
18 => {
let value = PaymentDetailsRes::decode_body(d)?;
BodyChoice::PaymentDetailsRes(value)
}
19 => {
let value = PaymentServiceSelectionReq::decode_body(d)?;
BodyChoice::PaymentServiceSelectionReq(value)
}
20 => {
let value = PaymentServiceSelectionRes::decode_body(d)?;
BodyChoice::PaymentServiceSelectionRes(value)
}
21 => {
let value = PowerDeliveryReq::decode_body(d)?;
BodyChoice::PowerDeliveryReq(value)
}
22 => {
let value = PowerDeliveryRes::decode_body(d)?;
BodyChoice::PowerDeliveryRes(value)
}
23 => {
let value = PreChargeReq::decode_body(d)?;
BodyChoice::PreChargeReq(value)
}
24 => {
let value = PreChargeRes::decode_body(d)?;
BodyChoice::PreChargeRes(value)
}
25 => {
let value = ServiceDetailReq::decode_body(d)?;
BodyChoice::ServiceDetailReq(value)
}
26 => {
let value = ServiceDetailRes::decode_body(d)?;
BodyChoice::ServiceDetailRes(value)
}
27 => {
let value = ServiceDiscoveryReq::decode_body(d)?;
BodyChoice::ServiceDiscoveryReq(value)
}
28 => {
let value = ServiceDiscoveryRes::decode_body(d)?;
BodyChoice::ServiceDiscoveryRes(value)
}
29 => {
let value = SessionSetupReq::decode_body(d)?;
BodyChoice::SessionSetupReq(value)
}
30 => {
let value = SessionSetupRes::decode_body(d)?;
BodyChoice::SessionSetupRes(value)
}
31 => {
let value = SessionStopReq::decode_body(d)?;
BodyChoice::SessionStopReq(value)
}
32 => {
let value = SessionStopRes::decode_body(d)?;
BodyChoice::SessionStopRes(value)
}
33 => {
let value = WeldingDetectionReq::decode_body(d)?;
BodyChoice::WeldingDetectionReq(value)
}
34 => {
let value = WeldingDetectionRes::decode_body(d)?;
BodyChoice::WeldingDetectionRes(value)
}
_ => return Err(ExiError::UnknownEventCode),
};
f_0 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self { choice: f_0 })
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct CableCheckReq {
pub dc_ev_status: DCEVStatus,
}
impl CableCheckReq {
const SHAPE: Shape =
Shape { prod_before: &[0, 1], width: &[1, 1], repeat_width: &[0], min: &[1], max: &[1] };
}
impl CableCheckReq {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.dc_ev_status;
w.start(e, 0, 0)?;
item.encode_body(e)?;
w.finish(0, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl CableCheckReq {
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 = DCEVStatus::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self { dc_ev_status: f_0.ok_or(ExiError::MissingElement)? })
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct CableCheckRes {
pub response_code: ResponseCode,
pub dc_evse_status: DCEVSEStatus,
pub evse_processing: EVSEProcessing,
}
impl CableCheckRes {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3],
width: &[1, 1, 1, 1],
repeat_width: &[0, 0, 0],
min: &[1, 1, 1],
max: &[1, 1, 1],
};
}
impl CableCheckRes {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.response_code;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), ResponseCode::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
{
let item = &self.dc_evse_status;
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 1);
}
{
let item = &self.evse_processing;
w.start(e, 2, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), EVSEProcessing::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(2, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl CableCheckRes {
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 = ResponseCode::from_index(d.nbit(ResponseCode::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = DCEVSEStatus::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = EVSEProcessing::from_index(d.nbit(EVSEProcessing::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_2 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
response_code: f_0.ok_or(ExiError::MissingElement)?,
dc_evse_status: f_1.ok_or(ExiError::MissingElement)?,
evse_processing: f_2.ok_or(ExiError::MissingElement)?,
})
}
}
#[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(4), 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(4), 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 CertificateChain {
pub id: Option<String>,
pub certificate: Vec<u8>,
pub sub_certificates: Option<SubCertificates>,
}
impl CertificateChain {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3],
width: &[2, 1, 2, 1],
repeat_width: &[0, 0, 0],
min: &[0, 1, 0],
max: &[1, 1, 1],
};
}
impl CertificateChain {
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(107), item, Lengths::max(65536))?;
w.finish(0, 1);
}
{
let item = &self.certificate;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.binary(item, Lengths::max(800))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
if let Some(item) = &self.sub_certificates {
w.start(e, 2, 0)?;
item.encode_body(e)?;
w.finish(2, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl CertificateChain {
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(107), Lengths::max(65536))?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.binary(Lengths::max(800))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
let value = SubCertificates::decode_body(d)?;
f_2 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
id: f_0,
certificate: f_1.ok_or(ExiError::MissingElement)?,
sub_certificates: f_2,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct CertificateInstallationReq {
pub id: String,
pub oem_provisioning_cert: Vec<u8>,
pub list_of_root_certificate_i_ds: ListOfRootCertificateIDs,
}
impl CertificateInstallationReq {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3],
width: &[1, 1, 1, 1],
repeat_width: &[0, 0, 0],
min: &[1, 1, 1],
max: &[1, 1, 1],
};
}
impl CertificateInstallationReq {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.id;
w.start(e, 0, 0)?;
e.string(ValueCtx(106), item, Lengths::max(65536))?;
w.finish(0, 1);
}
{
let item = &self.oem_provisioning_cert;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.binary(item, Lengths::max(800))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
{
let item = &self.list_of_root_certificate_i_ds;
w.start(e, 2, 0)?;
item.encode_body(e)?;
w.finish(2, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl CertificateInstallationReq {
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(106), Lengths::max(65536))?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.binary(Lengths::max(800))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
let value = ListOfRootCertificateIDs::decode_body(d)?;
f_2 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
id: f_0.ok_or(ExiError::MissingElement)?,
oem_provisioning_cert: f_1.ok_or(ExiError::MissingElement)?,
list_of_root_certificate_i_ds: f_2.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct CertificateInstallationRes {
pub response_code: ResponseCode,
pub sa_provisioning_certificate_chain: CertificateChain,
pub contract_signature_cert_chain: CertificateChain,
pub contract_signature_encrypted_private_key: ContractSignatureEncryptedPrivateKey,
pub dh_public_key: DiffieHellmanPublickey,
pub e_maid: EMAID,
}
impl CertificateInstallationRes {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4, 5, 6],
width: &[1, 1, 1, 1, 1, 1, 1],
repeat_width: &[0, 0, 0, 0, 0, 0],
min: &[1, 1, 1, 1, 1, 1],
max: &[1, 1, 1, 1, 1, 1],
};
}
impl CertificateInstallationRes {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.response_code;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), ResponseCode::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
{
let item = &self.sa_provisioning_certificate_chain;
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 1);
}
{
let item = &self.contract_signature_cert_chain;
w.start(e, 2, 0)?;
item.encode_body(e)?;
w.finish(2, 1);
}
{
let item = &self.contract_signature_encrypted_private_key;
w.start(e, 3, 0)?;
item.encode_body(e)?;
w.finish(3, 1);
}
{
let item = &self.dh_public_key;
w.start(e, 4, 0)?;
item.encode_body(e)?;
w.finish(4, 1);
}
{
let item = &self.e_maid;
w.start(e, 5, 0)?;
item.encode_body(e)?;
w.finish(5, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl CertificateInstallationRes {
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, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = ResponseCode::from_index(d.nbit(ResponseCode::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = CertificateChain::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
let value = CertificateChain::decode_body(d)?;
f_2 = Some(value);
}
Step::Item { index: 3, .. } => {
let value = ContractSignatureEncryptedPrivateKey::decode_body(d)?;
f_3 = Some(value);
}
Step::Item { index: 4, .. } => {
let value = DiffieHellmanPublickey::decode_body(d)?;
f_4 = Some(value);
}
Step::Item { index: 5, .. } => {
let value = EMAID::decode_body(d)?;
f_5 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
response_code: f_0.ok_or(ExiError::MissingElement)?,
sa_provisioning_certificate_chain: f_1.ok_or(ExiError::MissingElement)?,
contract_signature_cert_chain: f_2.ok_or(ExiError::MissingElement)?,
contract_signature_encrypted_private_key: f_3.ok_or(ExiError::MissingElement)?,
dh_public_key: f_4.ok_or(ExiError::MissingElement)?,
e_maid: f_5.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct CertificateUpdateReq {
pub id: String,
pub contract_signature_cert_chain: CertificateChain,
pub e_maid: String,
pub list_of_root_certificate_i_ds: ListOfRootCertificateIDs,
}
impl CertificateUpdateReq {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4],
width: &[1, 1, 1, 1, 1],
repeat_width: &[0, 0, 0, 0],
min: &[1, 1, 1, 1],
max: &[1, 1, 1, 1],
};
}
impl CertificateUpdateReq {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.id;
w.start(e, 0, 0)?;
e.string(ValueCtx(106), item, Lengths::max(65536))?;
w.finish(0, 1);
}
{
let item = &self.contract_signature_cert_chain;
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 1);
}
{
let item = &self.e_maid;
w.start(e, 2, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.string(ValueCtx(211), item, Lengths::new(14, 15))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(2, 1);
}
{
let item = &self.list_of_root_certificate_i_ds;
w.start(e, 3, 0)?;
item.encode_body(e)?;
w.finish(3, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl CertificateUpdateReq {
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, .. } => {
let value = d.string(ValueCtx(106), Lengths::max(65536))?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = CertificateChain::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.string(ValueCtx(211), Lengths::new(14, 15))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_2 = Some(value);
}
Step::Item { index: 3, .. } => {
let value = ListOfRootCertificateIDs::decode_body(d)?;
f_3 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
id: f_0.ok_or(ExiError::MissingElement)?,
contract_signature_cert_chain: f_1.ok_or(ExiError::MissingElement)?,
e_maid: f_2.ok_or(ExiError::MissingElement)?,
list_of_root_certificate_i_ds: f_3.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct CertificateUpdateRes {
pub response_code: ResponseCode,
pub sa_provisioning_certificate_chain: CertificateChain,
pub contract_signature_cert_chain: CertificateChain,
pub contract_signature_encrypted_private_key: ContractSignatureEncryptedPrivateKey,
pub dh_public_key: DiffieHellmanPublickey,
pub e_maid: EMAID,
pub retry_counter: Option<i16>,
}
impl CertificateUpdateRes {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4, 5, 6, 7],
width: &[1, 1, 1, 1, 1, 1, 2, 1],
repeat_width: &[0, 0, 0, 0, 0, 0, 0],
min: &[1, 1, 1, 1, 1, 1, 0],
max: &[1, 1, 1, 1, 1, 1, 1],
};
}
impl CertificateUpdateRes {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.response_code;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), ResponseCode::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
{
let item = &self.sa_provisioning_certificate_chain;
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 1);
}
{
let item = &self.contract_signature_cert_chain;
w.start(e, 2, 0)?;
item.encode_body(e)?;
w.finish(2, 1);
}
{
let item = &self.contract_signature_encrypted_private_key;
w.start(e, 3, 0)?;
item.encode_body(e)?;
w.finish(3, 1);
}
{
let item = &self.dh_public_key;
w.start(e, 4, 0)?;
item.encode_body(e)?;
w.finish(4, 1);
}
{
let item = &self.e_maid;
w.start(e, 5, 0)?;
item.encode_body(e)?;
w.finish(5, 1);
}
if let Some(item) = &self.retry_counter {
w.start(e, 6, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.int(i64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(6, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl CertificateUpdateRes {
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;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = ResponseCode::from_index(d.nbit(ResponseCode::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = CertificateChain::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
let value = CertificateChain::decode_body(d)?;
f_2 = Some(value);
}
Step::Item { index: 3, .. } => {
let value = ContractSignatureEncryptedPrivateKey::decode_body(d)?;
f_3 = Some(value);
}
Step::Item { index: 4, .. } => {
let value = DiffieHellmanPublickey::decode_body(d)?;
f_4 = Some(value);
}
Step::Item { index: 5, .. } => {
let value = EMAID::decode_body(d)?;
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 { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
response_code: f_0.ok_or(ExiError::MissingElement)?,
sa_provisioning_certificate_chain: f_1.ok_or(ExiError::MissingElement)?,
contract_signature_cert_chain: f_2.ok_or(ExiError::MissingElement)?,
contract_signature_encrypted_private_key: f_3.ok_or(ExiError::MissingElement)?,
dh_public_key: f_4.ok_or(ExiError::MissingElement)?,
e_maid: f_5.ok_or(ExiError::MissingElement)?,
retry_counter: f_6,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum ChargeParameterDiscoveryReqChoice {
ACEVChargeParameter(ACEVChargeParameter),
DCEVChargeParameter(DCEVChargeParameter),
EVChargeParameter(EVChargeParameter),
}
impl ChargeParameterDiscoveryReqChoice {
#[must_use]
pub const fn name(&self) -> &'static str {
match self {
Self::ACEVChargeParameter(_) => "AC_EVChargeParameter",
Self::DCEVChargeParameter(_) => "DC_EVChargeParameter",
Self::EVChargeParameter(_) => "EVChargeParameter",
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ChargeParameterDiscoveryReq {
pub max_entries_sa_schedule_tuple: Option<u16>,
pub requested_energy_transfer_mode: EnergyTransferMode,
pub choice: ChargeParameterDiscoveryReqChoice,
}
impl ChargeParameterDiscoveryReq {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 5],
width: &[2, 1, 2, 1],
repeat_width: &[0, 0, 0],
min: &[0, 1, 1],
max: &[1, 1, 1],
};
}
impl ChargeParameterDiscoveryReq {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
if let Some(item) = &self.max_entries_sa_schedule_tuple {
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.requested_energy_transfer_mode;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), EnergyTransferMode::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
{
let item = &self.choice;
match item {
ChargeParameterDiscoveryReqChoice::ACEVChargeParameter(value) => {
w.start_branch(e, 2, 0, 0)?;
value.encode_body(e)?;
}
ChargeParameterDiscoveryReqChoice::DCEVChargeParameter(value) => {
w.start_branch(e, 2, 0, 1)?;
value.encode_body(e)?;
}
ChargeParameterDiscoveryReqChoice::EVChargeParameter(value) => {
w.start_branch(e, 2, 0, 2)?;
value.encode_body(e)?;
}
}
w.finish(2, 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;
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 = 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 = EnergyTransferMode::from_index(d.nbit(EnergyTransferMode::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { index: 2, branch, .. } => {
let value = match branch {
0 => {
let value = ACEVChargeParameter::decode_body(d)?;
ChargeParameterDiscoveryReqChoice::ACEVChargeParameter(value)
}
1 => {
let value = DCEVChargeParameter::decode_body(d)?;
ChargeParameterDiscoveryReqChoice::DCEVChargeParameter(value)
}
2 => {
let value = EVChargeParameter::decode_body(d)?;
ChargeParameterDiscoveryReqChoice::EVChargeParameter(value)
}
_ => return Err(ExiError::UnknownEventCode),
};
f_2 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
max_entries_sa_schedule_tuple: f_0,
requested_energy_transfer_mode: f_1.ok_or(ExiError::MissingElement)?,
choice: f_2.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum ChargeParameterDiscoveryResChoice2 {
SAScheduleList(SAScheduleList),
SASchedules(SASchedules),
}
impl ChargeParameterDiscoveryResChoice2 {
#[must_use]
pub const fn name(&self) -> &'static str {
match self {
Self::SAScheduleList(_) => "SAScheduleList",
Self::SASchedules(_) => "SASchedules",
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum ChargeParameterDiscoveryResChoice3 {
ACEVSEChargeParameter(ACEVSEChargeParameter),
DCEVSEChargeParameter(DCEVSEChargeParameter),
EVSEChargeParameter(EVSEChargeParameter),
}
impl ChargeParameterDiscoveryResChoice3 {
#[must_use]
pub const fn name(&self) -> &'static str {
match self {
Self::ACEVSEChargeParameter(_) => "AC_EVSEChargeParameter",
Self::DCEVSEChargeParameter(_) => "DC_EVSEChargeParameter",
Self::EVSEChargeParameter(_) => "EVSEChargeParameter",
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ChargeParameterDiscoveryRes {
pub response_code: ResponseCode,
pub evse_processing: EVSEProcessing,
pub choice_2: Option<ChargeParameterDiscoveryResChoice2>,
pub choice_3: ChargeParameterDiscoveryResChoice3,
}
impl ChargeParameterDiscoveryRes {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 4, 7],
width: &[1, 1, 3, 2, 1],
repeat_width: &[0, 0, 0, 0],
min: &[1, 1, 0, 1],
max: &[1, 1, 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.response_code;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), ResponseCode::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
{
let item = &self.evse_processing;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), EVSEProcessing::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
if let Some(item) = &self.choice_2 {
match item {
ChargeParameterDiscoveryResChoice2::SAScheduleList(value) => {
w.start_branch(e, 2, 0, 0)?;
value.encode_body(e)?;
}
ChargeParameterDiscoveryResChoice2::SASchedules(value) => {
w.start_branch(e, 2, 0, 1)?;
value.encode_body(e)?;
}
}
w.finish(2, 1);
}
{
let item = &self.choice_3;
match item {
ChargeParameterDiscoveryResChoice3::ACEVSEChargeParameter(value) => {
w.start_branch(e, 3, 0, 0)?;
value.encode_body(e)?;
}
ChargeParameterDiscoveryResChoice3::DCEVSEChargeParameter(value) => {
w.start_branch(e, 3, 0, 1)?;
value.encode_body(e)?;
}
ChargeParameterDiscoveryResChoice3::EVSEChargeParameter(value) => {
w.start_branch(e, 3, 0, 2)?;
value.encode_body(e)?;
}
}
w.finish(3, 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;
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 = ResponseCode::from_index(d.nbit(ResponseCode::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = EVSEProcessing::from_index(d.nbit(EVSEProcessing::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { index: 2, branch, .. } => {
let value = match branch {
0 => {
let value = SAScheduleList::decode_body(d)?;
ChargeParameterDiscoveryResChoice2::SAScheduleList(value)
}
1 => {
let value = SASchedules::decode_body(d)?;
ChargeParameterDiscoveryResChoice2::SASchedules(value)
}
_ => return Err(ExiError::UnknownEventCode),
};
f_2 = Some(value);
}
Step::Item { index: 3, branch, .. } => {
let value = match branch {
0 => {
let value = ACEVSEChargeParameter::decode_body(d)?;
ChargeParameterDiscoveryResChoice3::ACEVSEChargeParameter(value)
}
1 => {
let value = DCEVSEChargeParameter::decode_body(d)?;
ChargeParameterDiscoveryResChoice3::DCEVSEChargeParameter(value)
}
2 => {
let value = EVSEChargeParameter::decode_body(d)?;
ChargeParameterDiscoveryResChoice3::EVSEChargeParameter(value)
}
_ => return Err(ExiError::UnknownEventCode),
};
f_3 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
response_code: f_0.ok_or(ExiError::MissingElement)?,
evse_processing: f_1.ok_or(ExiError::MissingElement)?,
choice_2: f_2,
choice_3: f_3.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ChargeService {
pub service_id: u16,
pub service_name: Option<String>,
pub service_category: ServiceCategory,
pub service_scope: Option<String>,
pub free_service: bool,
pub supported_energy_transfer_mode: SupportedEnergyTransferMode,
}
impl ChargeService {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4, 5, 6],
width: &[1, 2, 1, 2, 1, 1, 1],
repeat_width: &[0, 0, 0, 0, 0, 0],
min: &[1, 0, 1, 0, 1, 1],
max: &[1, 1, 1, 1, 1, 1],
};
}
impl ChargeService {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.service_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);
}
if let Some(item) = &self.service_name {
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.string(ValueCtx(175), item, Lengths::max(32))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
{
let item = &self.service_category;
w.start(e, 2, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), ServiceCategory::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(2, 1);
}
if let Some(item) = &self.service_scope {
w.start(e, 3, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.string(ValueCtx(178), item, Lengths::max(64))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(3, 1);
}
{
let item = &self.free_service;
w.start(e, 4, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.boolean(*item)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(4, 1);
}
{
let item = &self.supported_energy_transfer_mode;
w.start(e, 5, 0)?;
item.encode_body(e)?;
w.finish(5, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl ChargeService {
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, .. } => {
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 = d.string(ValueCtx(175), Lengths::max(32))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = ServiceCategory::from_index(d.nbit(ServiceCategory::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_2 = Some(value);
}
Step::Item { index: 3, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.string(ValueCtx(178), Lengths::max(64))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_3 = Some(value);
}
Step::Item { index: 4, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.boolean()?;
d.expect_event(0, SIMPLE_WIDTH)?; f_4 = Some(value);
}
Step::Item { index: 5, .. } => {
let value = SupportedEnergyTransferMode::decode_body(d)?;
f_5 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
service_id: f_0.ok_or(ExiError::MissingElement)?,
service_name: f_1,
service_category: f_2.ok_or(ExiError::MissingElement)?,
service_scope: f_3,
free_service: f_4.ok_or(ExiError::MissingElement)?,
supported_energy_transfer_mode: f_5.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ChargingProfile {
pub profile_entry: Vec<ProfileEntry>,
}
impl ChargingProfile {
const SHAPE: Shape =
Shape { prod_before: &[0, 1], width: &[1, 1], repeat_width: &[2], min: &[1], max: &[24] };
}
impl ChargingProfile {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let items = &self.profile_entry;
let count = items.len() as u32;
if count < 1 || count > 24 {
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 ChargingProfile {
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 = ProfileEntry::decode_body(d)?;
f_0.push(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
profile_entry: {
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 ChargingStatusReq;
impl ChargingStatusReq {
const SHAPE: Shape =
Shape { prod_before: &[0], width: &[1], repeat_width: &[], min: &[], max: &[] };
}
impl ChargingStatusReq {
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 ChargingStatusReq {
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 ChargingStatusRes {
pub response_code: ResponseCode,
pub evse_id: String,
pub sa_schedule_tuple_id: u8,
pub evse_max_current: Option<PhysicalValue>,
pub meter_info: Option<MeterInfo>,
pub receipt_required: Option<bool>,
pub ac_evse_status: ACEVSEStatus,
}
impl ChargingStatusRes {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4, 5, 6, 7],
width: &[1, 1, 1, 3, 2, 2, 1, 1],
repeat_width: &[0, 0, 0, 0, 0, 0, 0],
min: &[1, 1, 1, 0, 0, 0, 1],
max: &[1, 1, 1, 1, 1, 1, 1],
};
}
impl ChargingStatusRes {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.response_code;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), ResponseCode::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
{
let item = &self.evse_id;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.string(ValueCtx(72), item, Lengths::new(7, 37))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
{
let item = &self.sa_schedule_tuple_id;
w.start(e, 2, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.restricted(i64::from(*item), 1, 255)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(2, 1);
}
if let Some(item) = &self.evse_max_current {
w.start(e, 3, 0)?;
item.encode_body(e)?;
w.finish(3, 1);
}
if let Some(item) = &self.meter_info {
w.start(e, 4, 0)?;
item.encode_body(e)?;
w.finish(4, 1);
}
if let Some(item) = &self.receipt_required {
w.start(e, 5, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.boolean(*item)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(5, 1);
}
{
let item = &self.ac_evse_status;
w.start(e, 6, 0)?;
item.encode_body(e)?;
w.finish(6, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl ChargingStatusRes {
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;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = ResponseCode::from_index(d.nbit(ResponseCode::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.string(ValueCtx(72), Lengths::new(7, 37))?;
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(1, 255)?)
.map_err(|_| ExiError::ValueOutOfRange)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_2 = Some(value);
}
Step::Item { index: 3, .. } => {
let value = PhysicalValue::decode_body(d)?;
f_3 = Some(value);
}
Step::Item { index: 4, .. } => {
let value = MeterInfo::decode_body(d)?;
f_4 = Some(value);
}
Step::Item { index: 5, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.boolean()?;
d.expect_event(0, SIMPLE_WIDTH)?; f_5 = Some(value);
}
Step::Item { index: 6, .. } => {
let value = ACEVSEStatus::decode_body(d)?;
f_6 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
response_code: f_0.ok_or(ExiError::MissingElement)?,
evse_id: f_1.ok_or(ExiError::MissingElement)?,
sa_schedule_tuple_id: f_2.ok_or(ExiError::MissingElement)?,
evse_max_current: f_3,
meter_info: f_4,
receipt_required: f_5,
ac_evse_status: f_6.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ConsumptionCost {
pub start_value: PhysicalValue,
pub cost: Vec<Cost>,
}
impl ConsumptionCost {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 1, 1],
repeat_width: &[0, 2],
min: &[1, 1],
max: &[1, 3],
};
}
impl ConsumptionCost {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.start_value;
w.start(e, 0, 0)?;
item.encode_body(e)?;
w.finish(0, 1);
}
{
let items = &self.cost;
let count = items.len() as u32;
if count < 1 || count > 3 {
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 ConsumptionCost {
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 = PhysicalValue::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = Cost::decode_body(d)?;
f_1.push(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
start_value: f_0.ok_or(ExiError::MissingElement)?,
cost: {
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 ContractSignatureEncryptedPrivateKey {
pub id: String,
pub value: Vec<u8>,
}
impl ContractSignatureEncryptedPrivateKey {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 1, 1],
repeat_width: &[0, 0],
min: &[1, 1],
max: &[1, 1],
};
}
impl ContractSignatureEncryptedPrivateKey {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.id;
w.start(e, 0, 0)?;
e.string(ValueCtx(107), item, Lengths::max(65536))?;
w.finish(0, 1);
}
{
let item = &self.value;
w.start(e, 1, 0)?;
e.binary(item, Lengths::max(48))?;
w.finish(1, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl ContractSignatureEncryptedPrivateKey {
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(107), Lengths::max(65536))?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = d.binary(Lengths::max(48))?;
f_1 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
id: 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 Cost {
pub cost_kind: CostKind,
pub amount: u32,
pub amount_multiplier: Option<i8>,
}
impl Cost {
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 Cost {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.cost_kind;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), CostKind::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
{
let item = &self.amount;
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.amount_multiplier {
w.start(e, 2, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.restricted(i64::from(*item), -3, 3)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(2, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl Cost {
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 = CostKind::from_index(d.nbit(CostKind::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = u32::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 = i8::try_from(d.restricted(-3, 3)?)
.map_err(|_| ExiError::ValueOutOfRange)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_2 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
cost_kind: f_0.ok_or(ExiError::MissingElement)?,
amount: f_1.ok_or(ExiError::MissingElement)?,
amount_multiplier: f_2,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct CurrentDemandReq {
pub dc_ev_status: DCEVStatus,
pub ev_target_current: PhysicalValue,
pub ev_maximum_voltage_limit: Option<PhysicalValue>,
pub ev_maximum_current_limit: Option<PhysicalValue>,
pub ev_maximum_power_limit: Option<PhysicalValue>,
pub bulk_charging_complete: Option<bool>,
pub charging_complete: bool,
pub remaining_time_to_full_soc: Option<PhysicalValue>,
pub remaining_time_to_bulk_soc: Option<PhysicalValue>,
pub ev_target_voltage: PhysicalValue,
}
impl CurrentDemandReq {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
width: &[1, 1, 3, 3, 2, 2, 1, 2, 2, 1, 1],
repeat_width: &[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
min: &[1, 1, 0, 0, 0, 0, 1, 0, 0, 1],
max: &[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
};
}
impl CurrentDemandReq {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.dc_ev_status;
w.start(e, 0, 0)?;
item.encode_body(e)?;
w.finish(0, 1);
}
{
let item = &self.ev_target_current;
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 1);
}
if let Some(item) = &self.ev_maximum_voltage_limit {
w.start(e, 2, 0)?;
item.encode_body(e)?;
w.finish(2, 1);
}
if let Some(item) = &self.ev_maximum_current_limit {
w.start(e, 3, 0)?;
item.encode_body(e)?;
w.finish(3, 1);
}
if let Some(item) = &self.ev_maximum_power_limit {
w.start(e, 4, 0)?;
item.encode_body(e)?;
w.finish(4, 1);
}
if let Some(item) = &self.bulk_charging_complete {
w.start(e, 5, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.boolean(*item)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(5, 1);
}
{
let item = &self.charging_complete;
w.start(e, 6, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.boolean(*item)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(6, 1);
}
if let Some(item) = &self.remaining_time_to_full_soc {
w.start(e, 7, 0)?;
item.encode_body(e)?;
w.finish(7, 1);
}
if let Some(item) = &self.remaining_time_to_bulk_soc {
w.start(e, 8, 0)?;
item.encode_body(e)?;
w.finish(8, 1);
}
{
let item = &self.ev_target_voltage;
w.start(e, 9, 0)?;
item.encode_body(e)?;
w.finish(9, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl CurrentDemandReq {
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, .. } => {
let value = DCEVStatus::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = PhysicalValue::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
let value = PhysicalValue::decode_body(d)?;
f_2 = Some(value);
}
Step::Item { index: 3, .. } => {
let value = PhysicalValue::decode_body(d)?;
f_3 = Some(value);
}
Step::Item { index: 4, .. } => {
let value = PhysicalValue::decode_body(d)?;
f_4 = Some(value);
}
Step::Item { index: 5, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.boolean()?;
d.expect_event(0, SIMPLE_WIDTH)?; f_5 = Some(value);
}
Step::Item { index: 6, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.boolean()?;
d.expect_event(0, SIMPLE_WIDTH)?; f_6 = Some(value);
}
Step::Item { index: 7, .. } => {
let value = PhysicalValue::decode_body(d)?;
f_7 = Some(value);
}
Step::Item { index: 8, .. } => {
let value = PhysicalValue::decode_body(d)?;
f_8 = Some(value);
}
Step::Item { index: 9, .. } => {
let value = PhysicalValue::decode_body(d)?;
f_9 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
dc_ev_status: f_0.ok_or(ExiError::MissingElement)?,
ev_target_current: f_1.ok_or(ExiError::MissingElement)?,
ev_maximum_voltage_limit: f_2,
ev_maximum_current_limit: f_3,
ev_maximum_power_limit: f_4,
bulk_charging_complete: f_5,
charging_complete: f_6.ok_or(ExiError::MissingElement)?,
remaining_time_to_full_soc: f_7,
remaining_time_to_bulk_soc: f_8,
ev_target_voltage: f_9.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct CurrentDemandRes {
pub response_code: ResponseCode,
pub dc_evse_status: DCEVSEStatus,
pub evse_present_voltage: PhysicalValue,
pub evse_present_current: PhysicalValue,
pub evse_current_limit_achieved: bool,
pub evse_voltage_limit_achieved: bool,
pub evse_power_limit_achieved: bool,
pub evse_maximum_voltage_limit: Option<PhysicalValue>,
pub evse_maximum_current_limit: Option<PhysicalValue>,
pub evse_maximum_power_limit: Option<PhysicalValue>,
pub evse_id: String,
pub sa_schedule_tuple_id: u8,
pub meter_info: Option<MeterInfo>,
pub receipt_required: Option<bool>,
}
impl CurrentDemandRes {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14],
width: &[1, 1, 1, 1, 1, 1, 1, 3, 2, 2, 1, 1, 2, 2, 1],
repeat_width: &[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
min: &[1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0],
max: &[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
};
}
impl CurrentDemandRes {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.response_code;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), ResponseCode::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
{
let item = &self.dc_evse_status;
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 1);
}
{
let item = &self.evse_present_voltage;
w.start(e, 2, 0)?;
item.encode_body(e)?;
w.finish(2, 1);
}
{
let item = &self.evse_present_current;
w.start(e, 3, 0)?;
item.encode_body(e)?;
w.finish(3, 1);
}
{
let item = &self.evse_current_limit_achieved;
w.start(e, 4, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.boolean(*item)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(4, 1);
}
{
let item = &self.evse_voltage_limit_achieved;
w.start(e, 5, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.boolean(*item)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(5, 1);
}
{
let item = &self.evse_power_limit_achieved;
w.start(e, 6, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.boolean(*item)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(6, 1);
}
if let Some(item) = &self.evse_maximum_voltage_limit {
w.start(e, 7, 0)?;
item.encode_body(e)?;
w.finish(7, 1);
}
if let Some(item) = &self.evse_maximum_current_limit {
w.start(e, 8, 0)?;
item.encode_body(e)?;
w.finish(8, 1);
}
if let Some(item) = &self.evse_maximum_power_limit {
w.start(e, 9, 0)?;
item.encode_body(e)?;
w.finish(9, 1);
}
{
let item = &self.evse_id;
w.start(e, 10, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.string(ValueCtx(72), item, Lengths::new(7, 37))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(10, 1);
}
{
let item = &self.sa_schedule_tuple_id;
w.start(e, 11, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.restricted(i64::from(*item), 1, 255)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(11, 1);
}
if let Some(item) = &self.meter_info {
w.start(e, 12, 0)?;
item.encode_body(e)?;
w.finish(12, 1);
}
if let Some(item) = &self.receipt_required {
w.start(e, 13, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.boolean(*item)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(13, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl CurrentDemandRes {
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;
let mut f_10 = None;
let mut f_11 = None;
let mut f_12 = None;
let mut f_13 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = ResponseCode::from_index(d.nbit(ResponseCode::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = DCEVSEStatus::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
let value = PhysicalValue::decode_body(d)?;
f_2 = Some(value);
}
Step::Item { index: 3, .. } => {
let value = PhysicalValue::decode_body(d)?;
f_3 = Some(value);
}
Step::Item { index: 4, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.boolean()?;
d.expect_event(0, SIMPLE_WIDTH)?; f_4 = Some(value);
}
Step::Item { index: 5, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.boolean()?;
d.expect_event(0, SIMPLE_WIDTH)?; f_5 = Some(value);
}
Step::Item { index: 6, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.boolean()?;
d.expect_event(0, SIMPLE_WIDTH)?; f_6 = Some(value);
}
Step::Item { index: 7, .. } => {
let value = PhysicalValue::decode_body(d)?;
f_7 = Some(value);
}
Step::Item { index: 8, .. } => {
let value = PhysicalValue::decode_body(d)?;
f_8 = Some(value);
}
Step::Item { index: 9, .. } => {
let value = PhysicalValue::decode_body(d)?;
f_9 = Some(value);
}
Step::Item { index: 10, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.string(ValueCtx(72), Lengths::new(7, 37))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_10 = Some(value);
}
Step::Item { index: 11, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = u8::try_from(d.restricted(1, 255)?)
.map_err(|_| ExiError::ValueOutOfRange)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_11 = Some(value);
}
Step::Item { index: 12, .. } => {
let value = MeterInfo::decode_body(d)?;
f_12 = Some(value);
}
Step::Item { index: 13, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.boolean()?;
d.expect_event(0, SIMPLE_WIDTH)?; f_13 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
response_code: f_0.ok_or(ExiError::MissingElement)?,
dc_evse_status: f_1.ok_or(ExiError::MissingElement)?,
evse_present_voltage: f_2.ok_or(ExiError::MissingElement)?,
evse_present_current: f_3.ok_or(ExiError::MissingElement)?,
evse_current_limit_achieved: f_4.ok_or(ExiError::MissingElement)?,
evse_voltage_limit_achieved: f_5.ok_or(ExiError::MissingElement)?,
evse_power_limit_achieved: f_6.ok_or(ExiError::MissingElement)?,
evse_maximum_voltage_limit: f_7,
evse_maximum_current_limit: f_8,
evse_maximum_power_limit: f_9,
evse_id: f_10.ok_or(ExiError::MissingElement)?,
sa_schedule_tuple_id: f_11.ok_or(ExiError::MissingElement)?,
meter_info: f_12,
receipt_required: f_13,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct DCEVChargeParameter {
pub departure_time: Option<u32>,
pub dc_ev_status: DCEVStatus,
pub ev_maximum_current_limit: PhysicalValue,
pub ev_maximum_power_limit: Option<PhysicalValue>,
pub ev_maximum_voltage_limit: PhysicalValue,
pub ev_energy_capacity: Option<PhysicalValue>,
pub ev_energy_request: Option<PhysicalValue>,
pub full_soc: Option<u8>,
pub bulk_soc: Option<u8>,
}
impl DCEVChargeParameter {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
width: &[2, 1, 1, 2, 1, 3, 3, 2, 2, 1],
repeat_width: &[0, 0, 0, 0, 0, 0, 0, 0, 0],
min: &[0, 1, 1, 0, 1, 0, 0, 0, 0],
max: &[1, 1, 1, 1, 1, 1, 1, 1, 1],
};
}
impl DCEVChargeParameter {
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.dc_ev_status;
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 1);
}
{
let item = &self.ev_maximum_current_limit;
w.start(e, 2, 0)?;
item.encode_body(e)?;
w.finish(2, 1);
}
if let Some(item) = &self.ev_maximum_power_limit {
w.start(e, 3, 0)?;
item.encode_body(e)?;
w.finish(3, 1);
}
{
let item = &self.ev_maximum_voltage_limit;
w.start(e, 4, 0)?;
item.encode_body(e)?;
w.finish(4, 1);
}
if let Some(item) = &self.ev_energy_capacity {
w.start(e, 5, 0)?;
item.encode_body(e)?;
w.finish(5, 1);
}
if let Some(item) = &self.ev_energy_request {
w.start(e, 6, 0)?;
item.encode_body(e)?;
w.finish(6, 1);
}
if let Some(item) = &self.full_soc {
w.start(e, 7, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.restricted(i64::from(*item), 0, 100)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(7, 1);
}
if let Some(item) = &self.bulk_soc {
w.start(e, 8, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.restricted(i64::from(*item), 0, 100)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(8, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl DCEVChargeParameter {
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;
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 = DCEVStatus::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
let value = PhysicalValue::decode_body(d)?;
f_2 = Some(value);
}
Step::Item { index: 3, .. } => {
let value = PhysicalValue::decode_body(d)?;
f_3 = Some(value);
}
Step::Item { index: 4, .. } => {
let value = PhysicalValue::decode_body(d)?;
f_4 = Some(value);
}
Step::Item { index: 5, .. } => {
let value = PhysicalValue::decode_body(d)?;
f_5 = Some(value);
}
Step::Item { index: 6, .. } => {
let value = PhysicalValue::decode_body(d)?;
f_6 = Some(value);
}
Step::Item { index: 7, .. } => {
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_7 = Some(value);
}
Step::Item { index: 8, .. } => {
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_8 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
departure_time: f_0,
dc_ev_status: f_1.ok_or(ExiError::MissingElement)?,
ev_maximum_current_limit: f_2.ok_or(ExiError::MissingElement)?,
ev_maximum_power_limit: f_3,
ev_maximum_voltage_limit: f_4.ok_or(ExiError::MissingElement)?,
ev_energy_capacity: f_5,
ev_energy_request: f_6,
full_soc: f_7,
bulk_soc: f_8,
})
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[repr(u16)]
pub enum DCEVErrorCode {
NOERROR = 0,
FAILEDRESSTemperatureInhibit = 1,
FAILEDEVShiftPosition = 2,
FAILEDChargerConnectorLockFault = 3,
FAILEDEVRESSMalfunction = 4,
FAILEDChargingCurrentdifferential = 5,
FAILEDChargingVoltageOutOfRange = 6,
ReservedA = 7,
ReservedB = 8,
ReservedC = 9,
FAILEDChargingSystemIncompatibility = 10,
NoData = 11,
}
impl DCEVErrorCode {
pub const WIDTH: u32 = 4;
pub const ALL: [Self; 12] = [
Self::NOERROR,
Self::FAILEDRESSTemperatureInhibit,
Self::FAILEDEVShiftPosition,
Self::FAILEDChargerConnectorLockFault,
Self::FAILEDEVRESSMalfunction,
Self::FAILEDChargingCurrentdifferential,
Self::FAILEDChargingVoltageOutOfRange,
Self::ReservedA,
Self::ReservedB,
Self::ReservedC,
Self::FAILEDChargingSystemIncompatibility,
Self::NoData,
];
#[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::NOERROR,
1 => Self::FAILEDRESSTemperatureInhibit,
2 => Self::FAILEDEVShiftPosition,
3 => Self::FAILEDChargerConnectorLockFault,
4 => Self::FAILEDEVRESSMalfunction,
5 => Self::FAILEDChargingCurrentdifferential,
6 => Self::FAILEDChargingVoltageOutOfRange,
7 => Self::ReservedA,
8 => Self::ReservedB,
9 => Self::ReservedC,
10 => Self::FAILEDChargingSystemIncompatibility,
11 => Self::NoData,
_ => return Err(ExiError::UnknownEnumValue),
})
}
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::NOERROR => "NO_ERROR",
Self::FAILEDRESSTemperatureInhibit => "FAILED_RESSTemperatureInhibit",
Self::FAILEDEVShiftPosition => "FAILED_EVShiftPosition",
Self::FAILEDChargerConnectorLockFault => "FAILED_ChargerConnectorLockFault",
Self::FAILEDEVRESSMalfunction => "FAILED_EVRESSMalfunction",
Self::FAILEDChargingCurrentdifferential => "FAILED_ChargingCurrentdifferential",
Self::FAILEDChargingVoltageOutOfRange => "FAILED_ChargingVoltageOutOfRange",
Self::ReservedA => "Reserved_A",
Self::ReservedB => "Reserved_B",
Self::ReservedC => "Reserved_C",
Self::FAILEDChargingSystemIncompatibility => "FAILED_ChargingSystemIncompatibility",
Self::NoData => "NoData",
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct DCEVPowerDeliveryParameter {
pub dc_ev_status: DCEVStatus,
pub bulk_charging_complete: Option<bool>,
pub charging_complete: bool,
}
impl DCEVPowerDeliveryParameter {
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 DCEVPowerDeliveryParameter {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.dc_ev_status;
w.start(e, 0, 0)?;
item.encode_body(e)?;
w.finish(0, 1);
}
if let Some(item) = &self.bulk_charging_complete {
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.boolean(*item)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
{
let item = &self.charging_complete;
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 DCEVPowerDeliveryParameter {
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 = DCEVStatus::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.boolean()?;
d.expect_event(0, SIMPLE_WIDTH)?; 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 {
dc_ev_status: f_0.ok_or(ExiError::MissingElement)?,
bulk_charging_complete: f_1,
charging_complete: f_2.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct DCEVSEChargeParameter {
pub dc_evse_status: DCEVSEStatus,
pub evse_maximum_current_limit: PhysicalValue,
pub evse_maximum_power_limit: PhysicalValue,
pub evse_maximum_voltage_limit: PhysicalValue,
pub evse_minimum_current_limit: PhysicalValue,
pub evse_minimum_voltage_limit: PhysicalValue,
pub evse_current_regulation_tolerance: Option<PhysicalValue>,
pub evse_peak_current_ripple: PhysicalValue,
pub evse_energy_to_be_delivered: Option<PhysicalValue>,
}
impl DCEVSEChargeParameter {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
width: &[1, 1, 1, 1, 1, 1, 2, 1, 2, 1],
repeat_width: &[0, 0, 0, 0, 0, 0, 0, 0, 0],
min: &[1, 1, 1, 1, 1, 1, 0, 1, 0],
max: &[1, 1, 1, 1, 1, 1, 1, 1, 1],
};
}
impl DCEVSEChargeParameter {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.dc_evse_status;
w.start(e, 0, 0)?;
item.encode_body(e)?;
w.finish(0, 1);
}
{
let item = &self.evse_maximum_current_limit;
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 1);
}
{
let item = &self.evse_maximum_power_limit;
w.start(e, 2, 0)?;
item.encode_body(e)?;
w.finish(2, 1);
}
{
let item = &self.evse_maximum_voltage_limit;
w.start(e, 3, 0)?;
item.encode_body(e)?;
w.finish(3, 1);
}
{
let item = &self.evse_minimum_current_limit;
w.start(e, 4, 0)?;
item.encode_body(e)?;
w.finish(4, 1);
}
{
let item = &self.evse_minimum_voltage_limit;
w.start(e, 5, 0)?;
item.encode_body(e)?;
w.finish(5, 1);
}
if let Some(item) = &self.evse_current_regulation_tolerance {
w.start(e, 6, 0)?;
item.encode_body(e)?;
w.finish(6, 1);
}
{
let item = &self.evse_peak_current_ripple;
w.start(e, 7, 0)?;
item.encode_body(e)?;
w.finish(7, 1);
}
if let Some(item) = &self.evse_energy_to_be_delivered {
w.start(e, 8, 0)?;
item.encode_body(e)?;
w.finish(8, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl DCEVSEChargeParameter {
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;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
let value = DCEVSEStatus::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = PhysicalValue::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
let value = PhysicalValue::decode_body(d)?;
f_2 = Some(value);
}
Step::Item { index: 3, .. } => {
let value = PhysicalValue::decode_body(d)?;
f_3 = Some(value);
}
Step::Item { index: 4, .. } => {
let value = PhysicalValue::decode_body(d)?;
f_4 = Some(value);
}
Step::Item { index: 5, .. } => {
let value = PhysicalValue::decode_body(d)?;
f_5 = Some(value);
}
Step::Item { index: 6, .. } => {
let value = PhysicalValue::decode_body(d)?;
f_6 = Some(value);
}
Step::Item { index: 7, .. } => {
let value = PhysicalValue::decode_body(d)?;
f_7 = Some(value);
}
Step::Item { index: 8, .. } => {
let value = PhysicalValue::decode_body(d)?;
f_8 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
dc_evse_status: f_0.ok_or(ExiError::MissingElement)?,
evse_maximum_current_limit: f_1.ok_or(ExiError::MissingElement)?,
evse_maximum_power_limit: f_2.ok_or(ExiError::MissingElement)?,
evse_maximum_voltage_limit: f_3.ok_or(ExiError::MissingElement)?,
evse_minimum_current_limit: f_4.ok_or(ExiError::MissingElement)?,
evse_minimum_voltage_limit: f_5.ok_or(ExiError::MissingElement)?,
evse_current_regulation_tolerance: f_6,
evse_peak_current_ripple: f_7.ok_or(ExiError::MissingElement)?,
evse_energy_to_be_delivered: f_8,
})
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[repr(u16)]
pub enum DCEVSEStatusCode {
EVSENotReady = 0,
EVSEReady = 1,
EVSEShutdown = 2,
EVSEUtilityInterruptEvent = 3,
EVSEIsolationMonitoringActive = 4,
EVSEEmergencyShutdown = 5,
EVSEMalfunction = 6,
Reserved8 = 7,
Reserved9 = 8,
ReservedA = 9,
ReservedB = 10,
ReservedC = 11,
}
impl DCEVSEStatusCode {
pub const WIDTH: u32 = 4;
pub const ALL: [Self; 12] = [
Self::EVSENotReady,
Self::EVSEReady,
Self::EVSEShutdown,
Self::EVSEUtilityInterruptEvent,
Self::EVSEIsolationMonitoringActive,
Self::EVSEEmergencyShutdown,
Self::EVSEMalfunction,
Self::Reserved8,
Self::Reserved9,
Self::ReservedA,
Self::ReservedB,
Self::ReservedC,
];
#[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::EVSENotReady,
1 => Self::EVSEReady,
2 => Self::EVSEShutdown,
3 => Self::EVSEUtilityInterruptEvent,
4 => Self::EVSEIsolationMonitoringActive,
5 => Self::EVSEEmergencyShutdown,
6 => Self::EVSEMalfunction,
7 => Self::Reserved8,
8 => Self::Reserved9,
9 => Self::ReservedA,
10 => Self::ReservedB,
11 => Self::ReservedC,
_ => return Err(ExiError::UnknownEnumValue),
})
}
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::EVSENotReady => "EVSE_NotReady",
Self::EVSEReady => "EVSE_Ready",
Self::EVSEShutdown => "EVSE_Shutdown",
Self::EVSEUtilityInterruptEvent => "EVSE_UtilityInterruptEvent",
Self::EVSEIsolationMonitoringActive => "EVSE_IsolationMonitoringActive",
Self::EVSEEmergencyShutdown => "EVSE_EmergencyShutdown",
Self::EVSEMalfunction => "EVSE_Malfunction",
Self::Reserved8 => "Reserved_8",
Self::Reserved9 => "Reserved_9",
Self::ReservedA => "Reserved_A",
Self::ReservedB => "Reserved_B",
Self::ReservedC => "Reserved_C",
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct DCEVSEStatus {
pub notification_max_delay: u16,
pub evse_notification: EVSENotification,
pub evse_isolation_status: Option<IsolationLevel>,
pub evse_status_code: DCEVSEStatusCode,
}
impl DCEVSEStatus {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4],
width: &[1, 1, 2, 1, 1],
repeat_width: &[0, 0, 0, 0],
min: &[1, 1, 0, 1],
max: &[1, 1, 1, 1],
};
}
impl DCEVSEStatus {
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);
}
if let Some(item) = &self.evse_isolation_status {
w.start(e, 2, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), IsolationLevel::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(2, 1);
}
{
let item = &self.evse_status_code;
w.start(e, 3, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), DCEVSEStatusCode::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(3, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl DCEVSEStatus {
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 = 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 { index: 2, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = IsolationLevel::from_index(d.nbit(IsolationLevel::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_2 = Some(value);
}
Step::Item { index: 3, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = DCEVSEStatusCode::from_index(d.nbit(DCEVSEStatusCode::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_3 = 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)?,
evse_isolation_status: f_2,
evse_status_code: f_3.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct DCEVStatus {
pub ev_ready: bool,
pub ev_error_code: DCEVErrorCode,
pub ev_ress_soc: u8,
}
impl DCEVStatus {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3],
width: &[1, 1, 1, 1],
repeat_width: &[0, 0, 0],
min: &[1, 1, 1],
max: &[1, 1, 1],
};
}
impl DCEVStatus {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.ev_ready;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.boolean(*item)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
{
let item = &self.ev_error_code;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), DCEVErrorCode::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
{
let item = &self.ev_ress_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);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl DCEVStatus {
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.boolean()?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = DCEVErrorCode::from_index(d.nbit(DCEVErrorCode::WIDTH)?)?;
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 { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
ev_ready: f_0.ok_or(ExiError::MissingElement)?,
ev_error_code: f_1.ok_or(ExiError::MissingElement)?,
ev_ress_soc: f_2.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct DiffieHellmanPublickey {
pub id: String,
pub value: Vec<u8>,
}
impl DiffieHellmanPublickey {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 1, 1],
repeat_width: &[0, 0],
min: &[1, 1],
max: &[1, 1],
};
}
impl DiffieHellmanPublickey {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.id;
w.start(e, 0, 0)?;
e.string(ValueCtx(107), item, Lengths::max(65536))?;
w.finish(0, 1);
}
{
let item = &self.value;
w.start(e, 1, 0)?;
e.binary(item, Lengths::max(65))?;
w.finish(1, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl DiffieHellmanPublickey {
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(107), Lengths::max(65536))?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = d.binary(Lengths::max(65))?;
f_1 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
id: 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 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(4), 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(4), 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 EMAID {
pub id: String,
pub value: String,
}
impl EMAID {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 1, 1],
repeat_width: &[0, 0],
min: &[1, 1],
max: &[1, 1],
};
}
impl EMAID {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.id;
w.start(e, 0, 0)?;
e.string(ValueCtx(107), item, Lengths::max(65536))?;
w.finish(0, 1);
}
{
let item = &self.value;
w.start(e, 1, 0)?;
e.string(ValueCtx(0), item, Lengths::new(14, 15))?;
w.finish(1, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl EMAID {
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(107), Lengths::max(65536))?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = d.string(ValueCtx(0), Lengths::new(14, 15))?;
f_1 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
id: 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 EVChargeParameter {
pub departure_time: Option<u32>,
}
impl EVChargeParameter {
const SHAPE: Shape =
Shape { prod_before: &[0, 1], width: &[2, 1], repeat_width: &[0], min: &[0], max: &[1] };
}
impl EVChargeParameter {
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);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl EVChargeParameter {
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, .. } => {
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 { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self { departure_time: f_0 })
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct EVPowerDeliveryParameter;
impl EVPowerDeliveryParameter {
const SHAPE: Shape =
Shape { prod_before: &[0], width: &[1], repeat_width: &[], min: &[], max: &[] };
}
impl EVPowerDeliveryParameter {
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 EVPowerDeliveryParameter {
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 EVSEChargeParameter;
impl EVSEChargeParameter {
const SHAPE: Shape =
Shape { prod_before: &[0], width: &[1], repeat_width: &[], min: &[], max: &[] };
}
impl EVSEChargeParameter {
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 EVSEChargeParameter {
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, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[repr(u16)]
pub enum EVSENotification {
None = 0,
StopCharging = 1,
ReNegotiation = 2,
}
impl EVSENotification {
pub const WIDTH: u32 = 2;
pub const ALL: [Self; 3] = [Self::None, Self::StopCharging, Self::ReNegotiation];
#[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::None,
1 => Self::StopCharging,
2 => Self::ReNegotiation,
_ => return Err(ExiError::UnknownEnumValue),
})
}
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::None => "None",
Self::StopCharging => "StopCharging",
Self::ReNegotiation => "ReNegotiation",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[repr(u16)]
pub enum EVSEProcessing {
Finished = 0,
Ongoing = 1,
OngoingWaitingForCustomerInteraction = 2,
}
impl EVSEProcessing {
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, 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 EVStatus;
impl EVStatus {
const SHAPE: Shape =
Shape { prod_before: &[0], width: &[1], repeat_width: &[], min: &[], max: &[] };
}
impl EVStatus {
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 EVStatus {
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, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[repr(u16)]
pub enum EnergyTransferMode {
ACSinglePhaseCore = 0,
ACThreePhaseCore = 1,
DCCore = 2,
DCExtended = 3,
DCComboCore = 4,
DCUnique = 5,
}
impl EnergyTransferMode {
pub const WIDTH: u32 = 3;
pub const ALL: [Self; 6] = [
Self::ACSinglePhaseCore,
Self::ACThreePhaseCore,
Self::DCCore,
Self::DCExtended,
Self::DCComboCore,
Self::DCUnique,
];
#[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::ACSinglePhaseCore,
1 => Self::ACThreePhaseCore,
2 => Self::DCCore,
3 => Self::DCExtended,
4 => Self::DCComboCore,
5 => Self::DCUnique,
_ => return Err(ExiError::UnknownEnumValue),
})
}
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::ACSinglePhaseCore => "AC_single_phase_core",
Self::ACThreePhaseCore => "AC_three_phase_core",
Self::DCCore => "DC_core",
Self::DCExtended => "DC_extended",
Self::DCComboCore => "DC_combo_core",
Self::DCUnique => "DC_unique",
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum EntryChoice {
RelativeTimeInterval(RelativeTimeInterval),
TimeInterval(Interval),
}
impl EntryChoice {
#[must_use]
pub const fn name(&self) -> &'static str {
match self {
Self::RelativeTimeInterval(_) => "RelativeTimeInterval",
Self::TimeInterval(_) => "TimeInterval",
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Entry {
pub choice: EntryChoice,
}
impl Entry {
const SHAPE: Shape =
Shape { prod_before: &[0, 2], width: &[2, 1], repeat_width: &[0], min: &[1], max: &[1] };
}
impl Entry {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.choice;
match item {
EntryChoice::RelativeTimeInterval(value) => {
w.start_branch(e, 0, 0, 0)?;
value.encode_body(e)?;
}
EntryChoice::TimeInterval(value) => {
w.start_branch(e, 0, 0, 1)?;
value.encode_body(e)?;
}
}
w.finish(0, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl Entry {
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, branch, .. } => {
let value = match branch {
0 => {
let value = RelativeTimeInterval::decode_body(d)?;
EntryChoice::RelativeTimeInterval(value)
}
1 => {
let value = Interval::decode_body(d)?;
EntryChoice::TimeInterval(value)
}
_ => return Err(ExiError::UnknownEventCode),
};
f_0 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self { choice: f_0.ok_or(ExiError::MissingElement)? })
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Interval;
impl Interval {
const SHAPE: Shape =
Shape { prod_before: &[0], width: &[1], repeat_width: &[], min: &[], max: &[] };
}
impl Interval {
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 Interval {
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 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(105), 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(105), 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 notification: Option<Notification>,
pub signature: Option<Signature>,
}
impl MessageHeader {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3],
width: &[1, 2, 2, 1],
repeat_width: &[0, 0, 0],
min: &[1, 0, 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::max(8))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
if let Some(item) = &self.notification {
w.start(e, 1, 0)?;
item.encode_body(e)?;
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::max(8))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = Notification::decode_body(d)?;
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)?,
notification: f_1,
signature: f_2,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct MeterInfo {
pub meter_id: String,
pub meter_reading: Option<u64>,
pub sig_meter_reading: Option<Vec<u8>>,
pub meter_status: Option<i16>,
pub t_meter: Option<i64>,
}
impl MeterInfo {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4, 5],
width: &[1, 3, 3, 2, 2, 1],
repeat_width: &[0, 0, 0, 0, 0],
min: &[1, 0, 0, 0, 0],
max: &[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(111), item, Lengths::max(32))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
if let Some(item) = &self.meter_reading {
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.sig_meter_reading {
w.start(e, 2, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.binary(item, Lengths::max(64))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(2, 1);
}
if let Some(item) = &self.meter_status {
w.start(e, 3, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.int(i64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(3, 1);
}
if let Some(item) = &self.t_meter {
w.start(e, 4, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.int(i64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(4, 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;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.string(ValueCtx(111), 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 = d.binary(Lengths::max(64))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_2 = Some(value);
}
Step::Item { index: 3, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = i16::try_from(d.int()?).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 = i64::try_from(d.int()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_4 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
meter_id: f_0.ok_or(ExiError::MissingElement)?,
meter_reading: f_1,
sig_meter_reading: f_2,
meter_status: f_3,
t_meter: f_4,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct MeteringReceiptReq {
pub id: Option<String>,
pub session_id: Vec<u8>,
pub sa_schedule_tuple_id: Option<u8>,
pub meter_info: MeterInfo,
}
impl MeteringReceiptReq {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4],
width: &[2, 1, 2, 1, 1],
repeat_width: &[0, 0, 0, 0],
min: &[0, 1, 0, 1],
max: &[1, 1, 1, 1],
};
}
impl MeteringReceiptReq {
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(106), item, Lengths::max(65536))?;
w.finish(0, 1);
}
{
let item = &self.session_id;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.binary(item, Lengths::max(8))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
if let Some(item) = &self.sa_schedule_tuple_id {
w.start(e, 2, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.restricted(i64::from(*item), 1, 255)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(2, 1);
}
{
let item = &self.meter_info;
w.start(e, 3, 0)?;
item.encode_body(e)?;
w.finish(3, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl MeteringReceiptReq {
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, .. } => {
let value = d.string(ValueCtx(106), Lengths::max(65536))?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.binary(Lengths::max(8))?;
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(1, 255)?)
.map_err(|_| ExiError::ValueOutOfRange)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_2 = Some(value);
}
Step::Item { index: 3, .. } => {
let value = MeterInfo::decode_body(d)?;
f_3 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
id: f_0,
session_id: f_1.ok_or(ExiError::MissingElement)?,
sa_schedule_tuple_id: f_2,
meter_info: f_3.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum MeteringReceiptResChoice {
ACEVSEStatus(ACEVSEStatus),
DCEVSEStatus(DCEVSEStatus),
EVSEStatus(EVSEStatus),
}
impl MeteringReceiptResChoice {
#[must_use]
pub const fn name(&self) -> &'static str {
match self {
Self::ACEVSEStatus(_) => "AC_EVSEStatus",
Self::DCEVSEStatus(_) => "DC_EVSEStatus",
Self::EVSEStatus(_) => "EVSEStatus",
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct MeteringReceiptRes {
pub response_code: ResponseCode,
pub choice: MeteringReceiptResChoice,
}
impl MeteringReceiptRes {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 4],
width: &[1, 2, 1],
repeat_width: &[0, 0],
min: &[1, 1],
max: &[1, 1],
};
}
impl MeteringReceiptRes {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.response_code;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), ResponseCode::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
{
let item = &self.choice;
match item {
MeteringReceiptResChoice::ACEVSEStatus(value) => {
w.start_branch(e, 1, 0, 0)?;
value.encode_body(e)?;
}
MeteringReceiptResChoice::DCEVSEStatus(value) => {
w.start_branch(e, 1, 0, 1)?;
value.encode_body(e)?;
}
MeteringReceiptResChoice::EVSEStatus(value) => {
w.start_branch(e, 1, 0, 2)?;
value.encode_body(e)?;
}
}
w.finish(1, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl MeteringReceiptRes {
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 = ResponseCode::from_index(d.nbit(ResponseCode::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, branch, .. } => {
let value = match branch {
0 => {
let value = ACEVSEStatus::decode_body(d)?;
MeteringReceiptResChoice::ACEVSEStatus(value)
}
1 => {
let value = DCEVSEStatus::decode_body(d)?;
MeteringReceiptResChoice::DCEVSEStatus(value)
}
2 => {
let value = EVSEStatus::decode_body(d)?;
MeteringReceiptResChoice::EVSEStatus(value)
}
_ => return Err(ExiError::UnknownEventCode),
};
f_1 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
response_code: f_0.ok_or(ExiError::MissingElement)?,
choice: f_1.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Notification {
pub fault_code: FaultCode,
pub fault_msg: Option<String>,
}
impl Notification {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 2, 1],
repeat_width: &[0, 0],
min: &[1, 0],
max: &[1, 1],
};
}
impl Notification {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.fault_code;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), FaultCode::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
if let Some(item) = &self.fault_msg {
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.string(ValueCtx(100), item, Lengths::max(64))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl Notification {
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 = FaultCode::from_index(d.nbit(FaultCode::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.string(ValueCtx(100), Lengths::max(64))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self { fault_code: f_0.ok_or(ExiError::MissingElement)?, fault_msg: f_1 })
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum PMaxScheduleEntryChoice {
RelativeTimeInterval(RelativeTimeInterval),
TimeInterval(Interval),
}
impl PMaxScheduleEntryChoice {
#[must_use]
pub const fn name(&self) -> &'static str {
match self {
Self::RelativeTimeInterval(_) => "RelativeTimeInterval",
Self::TimeInterval(_) => "TimeInterval",
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PMaxScheduleEntry {
pub choice: PMaxScheduleEntryChoice,
pub p_max: PhysicalValue,
}
impl PMaxScheduleEntry {
const SHAPE: Shape = Shape {
prod_before: &[0, 2, 3],
width: &[2, 1, 1],
repeat_width: &[0, 0],
min: &[1, 1],
max: &[1, 1],
};
}
impl PMaxScheduleEntry {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.choice;
match item {
PMaxScheduleEntryChoice::RelativeTimeInterval(value) => {
w.start_branch(e, 0, 0, 0)?;
value.encode_body(e)?;
}
PMaxScheduleEntryChoice::TimeInterval(value) => {
w.start_branch(e, 0, 0, 1)?;
value.encode_body(e)?;
}
}
w.finish(0, 1);
}
{
let item = &self.p_max;
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl PMaxScheduleEntry {
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, branch, .. } => {
let value = match branch {
0 => {
let value = RelativeTimeInterval::decode_body(d)?;
PMaxScheduleEntryChoice::RelativeTimeInterval(value)
}
1 => {
let value = Interval::decode_body(d)?;
PMaxScheduleEntryChoice::TimeInterval(value)
}
_ => return Err(ExiError::UnknownEventCode),
};
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = PhysicalValue::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
choice: f_0.ok_or(ExiError::MissingElement)?,
p_max: f_1.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PMaxSchedule {
pub p_max_schedule_entry: Vec<PMaxScheduleEntry>,
}
impl PMaxSchedule {
const SHAPE: Shape =
Shape { prod_before: &[0, 1], width: &[1, 1], repeat_width: &[2], min: &[1], max: &[1024] };
}
impl PMaxSchedule {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let items = &self.p_max_schedule_entry;
let count = items.len() as u32;
if count < 1 || count > 1024 {
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 PMaxSchedule {
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 = PMaxScheduleEntry::decode_body(d)?;
f_0.push(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
p_max_schedule_entry: {
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 ParameterSet {
pub parameter_set_id: i16,
pub parameter: Vec<Parameter>,
}
impl ParameterSet {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 1, 1],
repeat_width: &[0, 2],
min: &[1, 1],
max: &[1, 16],
};
}
impl ParameterSet {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.parameter_set_id;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.int(i64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
{
let items = &self.parameter;
let count = items.len() as u32;
if count < 1 || count > 16 {
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 ParameterSet {
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, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = i16::try_from(d.int()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = Parameter::decode_body(d)?;
f_1.push(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
parameter_set_id: f_0.ok_or(ExiError::MissingElement)?,
parameter: {
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 enum ParameterChoice {
BoolValue(bool),
ByteValue(i8),
ShortValue(i16),
IntValue(i32),
PhysicalValue(PhysicalValue),
StringValue(String),
}
impl ParameterChoice {
#[must_use]
pub const fn name(&self) -> &'static str {
match self {
Self::BoolValue(_) => "boolValue",
Self::ByteValue(_) => "byteValue",
Self::ShortValue(_) => "shortValue",
Self::IntValue(_) => "intValue",
Self::PhysicalValue(_) => "physicalValue",
Self::StringValue(_) => "stringValue",
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Parameter {
pub name: String,
pub choice: ParameterChoice,
}
impl Parameter {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 7],
width: &[1, 3, 1],
repeat_width: &[0, 0],
min: &[1, 1],
max: &[1, 1],
};
}
impl Parameter {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.name;
w.start(e, 0, 0)?;
e.string(ValueCtx(119), item, Lengths::max(65536))?;
w.finish(0, 1);
}
{
let item = &self.choice;
match item {
ParameterChoice::BoolValue(value) => {
w.start_branch(e, 1, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.boolean(*value)?;
e.event(0, SIMPLE_WIDTH)?; }
ParameterChoice::ByteValue(value) => {
w.start_branch(e, 1, 0, 1)?;
e.event(0, SIMPLE_WIDTH)?; e.restricted(i64::from(*value), -128, 127)?;
e.event(0, SIMPLE_WIDTH)?; }
ParameterChoice::ShortValue(value) => {
w.start_branch(e, 1, 0, 2)?;
e.event(0, SIMPLE_WIDTH)?; e.int(i64::from(*value))?;
e.event(0, SIMPLE_WIDTH)?; }
ParameterChoice::IntValue(value) => {
w.start_branch(e, 1, 0, 3)?;
e.event(0, SIMPLE_WIDTH)?; e.int(i64::from(*value))?;
e.event(0, SIMPLE_WIDTH)?; }
ParameterChoice::PhysicalValue(value) => {
w.start_branch(e, 1, 0, 4)?;
value.encode_body(e)?;
}
ParameterChoice::StringValue(value) => {
w.start_branch(e, 1, 0, 5)?;
e.event(0, SIMPLE_WIDTH)?; e.string(ValueCtx(217), value, Lengths::max(65536))?;
e.event(0, SIMPLE_WIDTH)?; }
}
w.finish(1, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl Parameter {
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(119), Lengths::max(65536))?;
f_0 = Some(value);
}
Step::Item { index: 1, branch, .. } => {
let value = match branch {
0 => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.boolean()?;
d.expect_event(0, SIMPLE_WIDTH)?; ParameterChoice::BoolValue(value)
}
1 => {
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)?; ParameterChoice::ByteValue(value)
}
2 => {
d.expect_event(0, SIMPLE_WIDTH)?; let value =
i16::try_from(d.int()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; ParameterChoice::ShortValue(value)
}
3 => {
d.expect_event(0, SIMPLE_WIDTH)?; let value =
i32::try_from(d.int()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; ParameterChoice::IntValue(value)
}
4 => {
let value = PhysicalValue::decode_body(d)?;
ParameterChoice::PhysicalValue(value)
}
5 => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.string(ValueCtx(217), Lengths::max(65536))?;
d.expect_event(0, SIMPLE_WIDTH)?; ParameterChoice::StringValue(value)
}
_ => return Err(ExiError::UnknownEventCode),
};
f_1 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
name: f_0.ok_or(ExiError::MissingElement)?,
choice: f_1.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PaymentDetailsReq {
pub e_maid: String,
pub contract_signature_cert_chain: CertificateChain,
}
impl PaymentDetailsReq {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 1, 1],
repeat_width: &[0, 0],
min: &[1, 1],
max: &[1, 1],
};
}
impl PaymentDetailsReq {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.e_maid;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.string(ValueCtx(211), item, Lengths::new(14, 15))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
{
let item = &self.contract_signature_cert_chain;
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl PaymentDetailsReq {
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(211), Lengths::new(14, 15))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = CertificateChain::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
e_maid: f_0.ok_or(ExiError::MissingElement)?,
contract_signature_cert_chain: f_1.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PaymentDetailsRes {
pub response_code: ResponseCode,
pub gen_challenge: Vec<u8>,
pub evse_time_stamp: i64,
}
impl PaymentDetailsRes {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3],
width: &[1, 1, 1, 1],
repeat_width: &[0, 0, 0],
min: &[1, 1, 1],
max: &[1, 1, 1],
};
}
impl PaymentDetailsRes {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.response_code;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), ResponseCode::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
{
let item = &self.gen_challenge;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.binary(item, Lengths::exact(16))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
{
let item = &self.evse_time_stamp;
w.start(e, 2, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.int(i64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(2, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl PaymentDetailsRes {
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 = ResponseCode::from_index(d.nbit(ResponseCode::WIDTH)?)?;
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::exact(16))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = i64::try_from(d.int()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_2 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
response_code: f_0.ok_or(ExiError::MissingElement)?,
gen_challenge: f_1.ok_or(ExiError::MissingElement)?,
evse_time_stamp: f_2.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PaymentOptionList {
pub payment_option: Vec<PaymentOption>,
}
impl PaymentOptionList {
const SHAPE: Shape =
Shape { prod_before: &[0, 1], width: &[1, 1], repeat_width: &[2], min: &[1], max: &[2] };
}
impl PaymentOptionList {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let items = &self.payment_option;
let count = items.len() as u32;
if count < 1 || count > 2 {
return Err(ExiError::ValueOutOfRange);
}
for (c, item) in items.iter().enumerate() {
w.start(e, 0, c as u32)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), PaymentOption::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; }
if count > 0 {
w.finish(0, count);
}
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl PaymentOptionList {
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, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = PaymentOption::from_index(d.nbit(PaymentOption::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0.push(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
payment_option: {
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 PaymentServiceSelectionReq {
pub selected_payment_option: PaymentOption,
pub selected_service_list: SelectedServiceList,
}
impl PaymentServiceSelectionReq {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 1, 1],
repeat_width: &[0, 0],
min: &[1, 1],
max: &[1, 1],
};
}
impl PaymentServiceSelectionReq {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.selected_payment_option;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), PaymentOption::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
{
let item = &self.selected_service_list;
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl PaymentServiceSelectionReq {
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 = PaymentOption::from_index(d.nbit(PaymentOption::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = SelectedServiceList::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
selected_payment_option: f_0.ok_or(ExiError::MissingElement)?,
selected_service_list: f_1.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PaymentServiceSelectionRes {
pub response_code: ResponseCode,
}
impl PaymentServiceSelectionRes {
const SHAPE: Shape =
Shape { prod_before: &[0, 1], width: &[1, 1], repeat_width: &[0], min: &[1], max: &[1] };
}
impl PaymentServiceSelectionRes {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.response_code;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), ResponseCode::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl PaymentServiceSelectionRes {
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, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = ResponseCode::from_index(d.nbit(ResponseCode::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self { response_code: f_0.ok_or(ExiError::MissingElement)? })
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PhysicalValue {
pub multiplier: i8,
pub unit: UnitSymbol,
pub value: i16,
}
impl PhysicalValue {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3],
width: &[1, 1, 1, 1],
repeat_width: &[0, 0, 0],
min: &[1, 1, 1],
max: &[1, 1, 1],
};
}
impl PhysicalValue {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.multiplier;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.restricted(i64::from(*item), -3, 3)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
{
let item = &self.unit;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), UnitSymbol::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
{
let item = &self.value;
w.start(e, 2, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.int(i64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(2, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl PhysicalValue {
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 = i8::try_from(d.restricted(-3, 3)?)
.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 = UnitSymbol::from_index(d.nbit(UnitSymbol::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = i16::try_from(d.int()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_2 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
multiplier: f_0.ok_or(ExiError::MissingElement)?,
unit: f_1.ok_or(ExiError::MissingElement)?,
value: f_2.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum PowerDeliveryReqChoice {
DCEVPowerDeliveryParameter(DCEVPowerDeliveryParameter),
EVPowerDeliveryParameter(EVPowerDeliveryParameter),
}
impl PowerDeliveryReqChoice {
#[must_use]
pub const fn name(&self) -> &'static str {
match self {
Self::DCEVPowerDeliveryParameter(_) => "DC_EVPowerDeliveryParameter",
Self::EVPowerDeliveryParameter(_) => "EVPowerDeliveryParameter",
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PowerDeliveryReq {
pub charge_progress: ChargeProgress,
pub sa_schedule_tuple_id: u8,
pub charging_profile: Option<ChargingProfile>,
pub choice: Option<PowerDeliveryReqChoice>,
}
impl PowerDeliveryReq {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 5],
width: &[1, 1, 3, 2, 1],
repeat_width: &[0, 0, 0, 0],
min: &[1, 1, 0, 0],
max: &[1, 1, 1, 1],
};
}
impl PowerDeliveryReq {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.charge_progress;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), ChargeProgress::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
{
let item = &self.sa_schedule_tuple_id;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.restricted(i64::from(*item), 1, 255)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
if let Some(item) = &self.charging_profile {
w.start(e, 2, 0)?;
item.encode_body(e)?;
w.finish(2, 1);
}
if let Some(item) = &self.choice {
match item {
PowerDeliveryReqChoice::DCEVPowerDeliveryParameter(value) => {
w.start_branch(e, 3, 0, 0)?;
value.encode_body(e)?;
}
PowerDeliveryReqChoice::EVPowerDeliveryParameter(value) => {
w.start_branch(e, 3, 0, 1)?;
value.encode_body(e)?;
}
}
w.finish(3, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl PowerDeliveryReq {
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 = ChargeProgress::from_index(d.nbit(ChargeProgress::WIDTH)?)?;
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(1, 255)?)
.map_err(|_| ExiError::ValueOutOfRange)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
let value = ChargingProfile::decode_body(d)?;
f_2 = Some(value);
}
Step::Item { index: 3, branch, .. } => {
let value = match branch {
0 => {
let value = DCEVPowerDeliveryParameter::decode_body(d)?;
PowerDeliveryReqChoice::DCEVPowerDeliveryParameter(value)
}
1 => {
let value = EVPowerDeliveryParameter::decode_body(d)?;
PowerDeliveryReqChoice::EVPowerDeliveryParameter(value)
}
_ => return Err(ExiError::UnknownEventCode),
};
f_3 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
charge_progress: f_0.ok_or(ExiError::MissingElement)?,
sa_schedule_tuple_id: f_1.ok_or(ExiError::MissingElement)?,
charging_profile: f_2,
choice: f_3,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum PowerDeliveryResChoice {
ACEVSEStatus(ACEVSEStatus),
DCEVSEStatus(DCEVSEStatus),
EVSEStatus(EVSEStatus),
}
impl PowerDeliveryResChoice {
#[must_use]
pub const fn name(&self) -> &'static str {
match self {
Self::ACEVSEStatus(_) => "AC_EVSEStatus",
Self::DCEVSEStatus(_) => "DC_EVSEStatus",
Self::EVSEStatus(_) => "EVSEStatus",
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PowerDeliveryRes {
pub response_code: ResponseCode,
pub choice: PowerDeliveryResChoice,
}
impl PowerDeliveryRes {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 4],
width: &[1, 2, 1],
repeat_width: &[0, 0],
min: &[1, 1],
max: &[1, 1],
};
}
impl PowerDeliveryRes {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.response_code;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), ResponseCode::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
{
let item = &self.choice;
match item {
PowerDeliveryResChoice::ACEVSEStatus(value) => {
w.start_branch(e, 1, 0, 0)?;
value.encode_body(e)?;
}
PowerDeliveryResChoice::DCEVSEStatus(value) => {
w.start_branch(e, 1, 0, 1)?;
value.encode_body(e)?;
}
PowerDeliveryResChoice::EVSEStatus(value) => {
w.start_branch(e, 1, 0, 2)?;
value.encode_body(e)?;
}
}
w.finish(1, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl PowerDeliveryRes {
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 = ResponseCode::from_index(d.nbit(ResponseCode::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, branch, .. } => {
let value = match branch {
0 => {
let value = ACEVSEStatus::decode_body(d)?;
PowerDeliveryResChoice::ACEVSEStatus(value)
}
1 => {
let value = DCEVSEStatus::decode_body(d)?;
PowerDeliveryResChoice::DCEVSEStatus(value)
}
2 => {
let value = EVSEStatus::decode_body(d)?;
PowerDeliveryResChoice::EVSEStatus(value)
}
_ => return Err(ExiError::UnknownEventCode),
};
f_1 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
response_code: f_0.ok_or(ExiError::MissingElement)?,
choice: f_1.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PreChargeReq {
pub dc_ev_status: DCEVStatus,
pub ev_target_voltage: PhysicalValue,
pub ev_target_current: PhysicalValue,
}
impl PreChargeReq {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3],
width: &[1, 1, 1, 1],
repeat_width: &[0, 0, 0],
min: &[1, 1, 1],
max: &[1, 1, 1],
};
}
impl PreChargeReq {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.dc_ev_status;
w.start(e, 0, 0)?;
item.encode_body(e)?;
w.finish(0, 1);
}
{
let item = &self.ev_target_voltage;
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 1);
}
{
let item = &self.ev_target_current;
w.start(e, 2, 0)?;
item.encode_body(e)?;
w.finish(2, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl PreChargeReq {
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 = DCEVStatus::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = PhysicalValue::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
let value = PhysicalValue::decode_body(d)?;
f_2 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
dc_ev_status: f_0.ok_or(ExiError::MissingElement)?,
ev_target_voltage: f_1.ok_or(ExiError::MissingElement)?,
ev_target_current: f_2.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PreChargeRes {
pub response_code: ResponseCode,
pub dc_evse_status: DCEVSEStatus,
pub evse_present_voltage: PhysicalValue,
}
impl PreChargeRes {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3],
width: &[1, 1, 1, 1],
repeat_width: &[0, 0, 0],
min: &[1, 1, 1],
max: &[1, 1, 1],
};
}
impl PreChargeRes {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.response_code;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), ResponseCode::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
{
let item = &self.dc_evse_status;
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 1);
}
{
let item = &self.evse_present_voltage;
w.start(e, 2, 0)?;
item.encode_body(e)?;
w.finish(2, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl PreChargeRes {
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 = ResponseCode::from_index(d.nbit(ResponseCode::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = DCEVSEStatus::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
let value = PhysicalValue::decode_body(d)?;
f_2 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
response_code: f_0.ok_or(ExiError::MissingElement)?,
dc_evse_status: f_1.ok_or(ExiError::MissingElement)?,
evse_present_voltage: f_2.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ProfileEntry {
pub charging_profile_entry_start: u32,
pub charging_profile_entry_max_power: PhysicalValue,
pub charging_profile_entry_max_number_of_phases_in_use: Option<u8>,
}
impl ProfileEntry {
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 ProfileEntry {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.charging_profile_entry_start;
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.charging_profile_entry_max_power;
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 1);
}
if let Some(item) = &self.charging_profile_entry_max_number_of_phases_in_use {
w.start(e, 2, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.restricted(i64::from(*item), 1, 3)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(2, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl ProfileEntry {
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 = 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 = PhysicalValue::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value =
u8::try_from(d.restricted(1, 3)?).map_err(|_| ExiError::ValueOutOfRange)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_2 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
charging_profile_entry_start: f_0.ok_or(ExiError::MissingElement)?,
charging_profile_entry_max_power: f_1.ok_or(ExiError::MissingElement)?,
charging_profile_entry_max_number_of_phases_in_use: f_2,
})
}
}
#[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 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(105), item, Lengths::max(65536))?;
w.finish(0, 1);
}
if let Some(item) = &self.r#type {
w.start(e, 1, 0)?;
e.string(ValueCtx(196), item, Lengths::max(65536))?;
w.finish(1, 1);
}
if let Some(item) = &self.uri {
w.start(e, 2, 0)?;
e.string(ValueCtx(197), 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(105), Lengths::max(65536))?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = d.string(ValueCtx(196), Lengths::max(65536))?;
f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
let value = d.string(ValueCtx(197), 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 RelativeTimeInterval {
pub start: u32,
pub duration: Option<u32>,
}
impl RelativeTimeInterval {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 2, 1],
repeat_width: &[0, 0],
min: &[1, 0],
max: &[1, 1],
};
}
impl RelativeTimeInterval {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.start;
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.duration {
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.uint(u64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl RelativeTimeInterval {
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, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = u32::try_from(d.uint()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self { start: f_0.ok_or(ExiError::MissingElement)?, duration: f_1 })
}
}
#[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(196), item, Lengths::max(65536))?;
w.finish(0, 1);
}
if let Some(item) = &self.uri {
w.start(e, 1, 0)?;
e.string(ValueCtx(197), 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(196), Lengths::max(65536))?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = d.string(ValueCtx(197), 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 SAScheduleList {
pub sa_schedule_tuple: Vec<SAScheduleTuple>,
}
impl SAScheduleList {
const SHAPE: Shape =
Shape { prod_before: &[0, 1], width: &[1, 1], repeat_width: &[2], min: &[1], max: &[3] };
}
impl SAScheduleList {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let items = &self.sa_schedule_tuple;
let count = items.len() as u32;
if count < 1 || count > 3 {
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 SAScheduleList {
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 = SAScheduleTuple::decode_body(d)?;
f_0.push(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
sa_schedule_tuple: {
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 SAScheduleTuple {
pub sa_schedule_tuple_id: u8,
pub p_max_schedule: PMaxSchedule,
pub sales_tariff: Option<SalesTariff>,
}
impl SAScheduleTuple {
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 SAScheduleTuple {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.sa_schedule_tuple_id;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.restricted(i64::from(*item), 1, 255)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
{
let item = &self.p_max_schedule;
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 1);
}
if let Some(item) = &self.sales_tariff {
w.start(e, 2, 0)?;
item.encode_body(e)?;
w.finish(2, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl SAScheduleTuple {
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 = u8::try_from(d.restricted(1, 255)?)
.map_err(|_| ExiError::ValueOutOfRange)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = PMaxSchedule::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
let value = SalesTariff::decode_body(d)?;
f_2 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
sa_schedule_tuple_id: f_0.ok_or(ExiError::MissingElement)?,
p_max_schedule: f_1.ok_or(ExiError::MissingElement)?,
sales_tariff: f_2,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct SASchedules;
impl SASchedules {
const SHAPE: Shape =
Shape { prod_before: &[0], width: &[1], repeat_width: &[], min: &[], max: &[] };
}
impl SASchedules {
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 SASchedules {
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 enum SalesTariffEntryChoice {
RelativeTimeInterval(RelativeTimeInterval),
TimeInterval(Interval),
}
impl SalesTariffEntryChoice {
#[must_use]
pub const fn name(&self) -> &'static str {
match self {
Self::RelativeTimeInterval(_) => "RelativeTimeInterval",
Self::TimeInterval(_) => "TimeInterval",
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct SalesTariffEntry {
pub choice: SalesTariffEntryChoice,
pub e_price_level: Option<u8>,
pub consumption_cost: Vec<ConsumptionCost>,
}
impl SalesTariffEntry {
const SHAPE: Shape = Shape {
prod_before: &[0, 2, 3, 4],
width: &[2, 2, 2, 1],
repeat_width: &[0, 0, 2],
min: &[1, 0, 0],
max: &[1, 1, 3],
};
}
impl SalesTariffEntry {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.choice;
match item {
SalesTariffEntryChoice::RelativeTimeInterval(value) => {
w.start_branch(e, 0, 0, 0)?;
value.encode_body(e)?;
}
SalesTariffEntryChoice::TimeInterval(value) => {
w.start_branch(e, 0, 0, 1)?;
value.encode_body(e)?;
}
}
w.finish(0, 1);
}
if let Some(item) = &self.e_price_level {
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.restricted(i64::from(*item), 0, 255)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
{
let items = &self.consumption_cost;
let count = items.len() as u32;
if count > 3 {
return Err(ExiError::ValueOutOfRange);
}
for (c, item) in items.iter().enumerate() {
w.start(e, 2, c as u32)?;
item.encode_body(e)?;
}
if count > 0 {
w.finish(2, count);
}
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl SalesTariffEntry {
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 = Vec::new();
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, branch, .. } => {
let value = match branch {
0 => {
let value = RelativeTimeInterval::decode_body(d)?;
SalesTariffEntryChoice::RelativeTimeInterval(value)
}
1 => {
let value = Interval::decode_body(d)?;
SalesTariffEntryChoice::TimeInterval(value)
}
_ => return Err(ExiError::UnknownEventCode),
};
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = u8::try_from(d.restricted(0, 255)?)
.map_err(|_| ExiError::ValueOutOfRange)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
let value = ConsumptionCost::decode_body(d)?;
f_2.push(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
choice: f_0.ok_or(ExiError::MissingElement)?,
e_price_level: f_1,
consumption_cost: f_2,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct SalesTariff {
pub id: Option<String>,
pub sales_tariff_id: u8,
pub sales_tariff_description: Option<String>,
pub num_e_price_levels: Option<u8>,
pub sales_tariff_entry: Vec<SalesTariffEntry>,
}
impl SalesTariff {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4, 5],
width: &[2, 1, 2, 2, 1, 1],
repeat_width: &[0, 0, 0, 0, 2],
min: &[0, 1, 0, 0, 1],
max: &[1, 1, 1, 1, 1024],
};
}
impl SalesTariff {
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(107), item, Lengths::max(65536))?;
w.finish(0, 1);
}
{
let item = &self.sales_tariff_id;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.restricted(i64::from(*item), 1, 255)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
if let Some(item) = &self.sales_tariff_description {
w.start(e, 2, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.string(ValueCtx(159), item, Lengths::max(32))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(2, 1);
}
if let Some(item) = &self.num_e_price_levels {
w.start(e, 3, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.restricted(i64::from(*item), 0, 255)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(3, 1);
}
{
let items = &self.sales_tariff_entry;
let count = items.len() as u32;
if count < 1 || count > 1024 {
return Err(ExiError::ValueOutOfRange);
}
for (c, item) in items.iter().enumerate() {
w.start(e, 4, c as u32)?;
item.encode_body(e)?;
}
if count > 0 {
w.finish(4, count);
}
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl SalesTariff {
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 = Vec::new();
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
let value = d.string(ValueCtx(107), Lengths::max(65536))?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = u8::try_from(d.restricted(1, 255)?)
.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 = d.string(ValueCtx(159), Lengths::max(32))?;
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, 255)?)
.map_err(|_| ExiError::ValueOutOfRange)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_3 = Some(value);
}
Step::Item { index: 4, .. } => {
let value = SalesTariffEntry::decode_body(d)?;
f_4.push(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
id: f_0,
sales_tariff_id: f_1.ok_or(ExiError::MissingElement)?,
sales_tariff_description: f_2,
num_e_price_levels: f_3,
sales_tariff_entry: {
if (f_4.len() as u32) < 1 {
return Err(ExiError::MissingElement);
}
f_4
},
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct SelectedServiceList {
pub selected_service: Vec<SelectedService>,
}
impl SelectedServiceList {
const SHAPE: Shape =
Shape { prod_before: &[0, 1], width: &[1, 1], repeat_width: &[2], min: &[1], max: &[16] };
}
impl SelectedServiceList {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let items = &self.selected_service;
let count = items.len() as u32;
if count < 1 || count > 16 {
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 SelectedServiceList {
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 = SelectedService::decode_body(d)?;
f_0.push(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
selected_service: {
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 SelectedService {
pub service_id: u16,
pub parameter_set_id: Option<i16>,
}
impl SelectedService {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 2, 1],
repeat_width: &[0, 0],
min: &[1, 0],
max: &[1, 1],
};
}
impl SelectedService {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.service_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);
}
if let Some(item) = &self.parameter_set_id {
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 SelectedService {
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 = 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 { service_id: f_0.ok_or(ExiError::MissingElement)?, parameter_set_id: f_1 })
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ServiceDetailReq {
pub service_id: u16,
}
impl ServiceDetailReq {
const SHAPE: Shape =
Shape { prod_before: &[0, 1], width: &[1, 1], repeat_width: &[0], min: &[1], max: &[1] };
}
impl ServiceDetailReq {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.service_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);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl ServiceDetailReq {
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, .. } => {
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 { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self { service_id: f_0.ok_or(ExiError::MissingElement)? })
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ServiceDetailRes {
pub response_code: ResponseCode,
pub service_id: u16,
pub service_parameter_list: Option<ServiceParameterList>,
}
impl ServiceDetailRes {
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 ServiceDetailRes {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.response_code;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), ResponseCode::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
{
let item = &self.service_id;
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.service_parameter_list {
w.start(e, 2, 0)?;
item.encode_body(e)?;
w.finish(2, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl ServiceDetailRes {
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 = ResponseCode::from_index(d.nbit(ResponseCode::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = u16::try_from(d.uint()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
let value = ServiceParameterList::decode_body(d)?;
f_2 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
response_code: f_0.ok_or(ExiError::MissingElement)?,
service_id: f_1.ok_or(ExiError::MissingElement)?,
service_parameter_list: f_2,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ServiceDiscoveryReq {
pub service_scope: Option<String>,
pub service_category: Option<ServiceCategory>,
}
impl ServiceDiscoveryReq {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[2, 2, 1],
repeat_width: &[0, 0],
min: &[0, 0],
max: &[1, 1],
};
}
impl ServiceDiscoveryReq {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
if let Some(item) = &self.service_scope {
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.string(ValueCtx(177), item, Lengths::max(64))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
if let Some(item) = &self.service_category {
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), ServiceCategory::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl ServiceDiscoveryReq {
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(177), Lengths::max(64))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = ServiceCategory::from_index(d.nbit(ServiceCategory::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self { service_scope: f_0, service_category: f_1 })
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ServiceDiscoveryRes {
pub response_code: ResponseCode,
pub payment_option_list: PaymentOptionList,
pub charge_service: ChargeService,
pub service_list: Option<ServiceList>,
}
impl ServiceDiscoveryRes {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4],
width: &[1, 1, 1, 2, 1],
repeat_width: &[0, 0, 0, 0],
min: &[1, 1, 1, 0],
max: &[1, 1, 1, 1],
};
}
impl ServiceDiscoveryRes {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.response_code;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), ResponseCode::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
{
let item = &self.payment_option_list;
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 1);
}
{
let item = &self.charge_service;
w.start(e, 2, 0)?;
item.encode_body(e)?;
w.finish(2, 1);
}
if let Some(item) = &self.service_list {
w.start(e, 3, 0)?;
item.encode_body(e)?;
w.finish(3, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl ServiceDiscoveryRes {
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 = ResponseCode::from_index(d.nbit(ResponseCode::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = PaymentOptionList::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
let value = ChargeService::decode_body(d)?;
f_2 = Some(value);
}
Step::Item { index: 3, .. } => {
let value = ServiceList::decode_body(d)?;
f_3 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
response_code: f_0.ok_or(ExiError::MissingElement)?,
payment_option_list: f_1.ok_or(ExiError::MissingElement)?,
charge_service: f_2.ok_or(ExiError::MissingElement)?,
service_list: f_3,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ServiceList {
pub service: Vec<Service>,
}
impl ServiceList {
const SHAPE: Shape =
Shape { prod_before: &[0, 1], width: &[1, 1], repeat_width: &[2], min: &[1], max: &[8] };
}
impl ServiceList {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let items = &self.service;
let count = items.len() as u32;
if count < 1 || count > 8 {
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 ServiceList {
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 = Service::decode_body(d)?;
f_0.push(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
service: {
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 ServiceParameterList {
pub parameter_set: Vec<ParameterSet>,
}
impl ServiceParameterList {
const SHAPE: Shape =
Shape { prod_before: &[0, 1], width: &[1, 1], repeat_width: &[2], min: &[1], max: &[255] };
}
impl ServiceParameterList {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let items = &self.parameter_set;
let count = items.len() as u32;
if count < 1 || count > 255 {
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 ServiceParameterList {
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 = ParameterSet::decode_body(d)?;
f_0.push(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
parameter_set: {
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 Service {
pub service_id: u16,
pub service_name: Option<String>,
pub service_category: ServiceCategory,
pub service_scope: Option<String>,
pub free_service: bool,
}
impl Service {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4, 5],
width: &[1, 2, 1, 2, 1, 1],
repeat_width: &[0, 0, 0, 0, 0],
min: &[1, 0, 1, 0, 1],
max: &[1, 1, 1, 1, 1],
};
}
impl Service {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.service_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);
}
if let Some(item) = &self.service_name {
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.string(ValueCtx(175), item, Lengths::max(32))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
{
let item = &self.service_category;
w.start(e, 2, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), ServiceCategory::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(2, 1);
}
if let Some(item) = &self.service_scope {
w.start(e, 3, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.string(ValueCtx(178), item, Lengths::max(64))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(3, 1);
}
{
let item = &self.free_service;
w.start(e, 4, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.boolean(*item)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(4, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl Service {
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, .. } => {
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 = d.string(ValueCtx(175), Lengths::max(32))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = ServiceCategory::from_index(d.nbit(ServiceCategory::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_2 = Some(value);
}
Step::Item { index: 3, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.string(ValueCtx(178), Lengths::max(64))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_3 = Some(value);
}
Step::Item { index: 4, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.boolean()?;
d.expect_event(0, SIMPLE_WIDTH)?; f_4 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
service_id: f_0.ok_or(ExiError::MissingElement)?,
service_name: f_1,
service_category: f_2.ok_or(ExiError::MissingElement)?,
service_scope: f_3,
free_service: f_4.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct SessionSetupReq {
pub evcc_id: Vec<u8>,
}
impl SessionSetupReq {
const SHAPE: Shape =
Shape { prod_before: &[0, 1], width: &[1, 1], repeat_width: &[0], min: &[1], max: &[1] };
}
impl SessionSetupReq {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.evcc_id;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.binary(item, Lengths::max(6))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl SessionSetupReq {
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, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.binary(Lengths::max(6))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self { evcc_id: f_0.ok_or(ExiError::MissingElement)? })
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct SessionSetupRes {
pub response_code: ResponseCode,
pub evse_id: String,
pub evse_time_stamp: Option<i64>,
}
impl SessionSetupRes {
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 SessionSetupRes {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.response_code;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), ResponseCode::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
{
let item = &self.evse_id;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.string(ValueCtx(72), item, Lengths::new(7, 37))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
if let Some(item) = &self.evse_time_stamp {
w.start(e, 2, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.int(i64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(2, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl SessionSetupRes {
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 = ResponseCode::from_index(d.nbit(ResponseCode::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.string(ValueCtx(72), Lengths::new(7, 37))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = i64::try_from(d.int()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_2 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
response_code: f_0.ok_or(ExiError::MissingElement)?,
evse_id: f_1.ok_or(ExiError::MissingElement)?,
evse_time_stamp: f_2,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct SessionStopReq {
pub charging_session: ChargingSession,
}
impl SessionStopReq {
const SHAPE: Shape =
Shape { prod_before: &[0, 1], width: &[1, 1], repeat_width: &[0], min: &[1], max: &[1] };
}
impl SessionStopReq {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.charging_session;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), ChargingSession::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl SessionStopReq {
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, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = ChargingSession::from_index(d.nbit(ChargingSession::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self { charging_session: f_0.ok_or(ExiError::MissingElement)? })
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct SessionStopRes {
pub response_code: ResponseCode,
}
impl SessionStopRes {
const SHAPE: Shape =
Shape { prod_before: &[0, 1], width: &[1, 1], repeat_width: &[0], min: &[1], max: &[1] };
}
impl SessionStopRes {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.response_code;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), ResponseCode::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl SessionStopRes {
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, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = ResponseCode::from_index(d.nbit(ResponseCode::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self { response_code: f_0.ok_or(ExiError::MissingElement)? })
}
}
#[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(4), 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(4), 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(105), 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(105), 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(105), 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(105), 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(105), 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(105), 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 SubCertificates {
pub certificate: Vec<Vec<u8>>,
}
impl SubCertificates {
const SHAPE: Shape =
Shape { prod_before: &[0, 1], width: &[1, 1], repeat_width: &[2], min: &[1], max: &[4] };
}
impl SubCertificates {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let items = &self.certificate;
let count = items.len() as u32;
if count < 1 || count > 4 {
return Err(ExiError::ValueOutOfRange);
}
for (c, item) in items.iter().enumerate() {
w.start(e, 0, c as u32)?;
e.event(0, SIMPLE_WIDTH)?; e.binary(item, Lengths::max(800))?;
e.event(0, SIMPLE_WIDTH)?; }
if count > 0 {
w.finish(0, count);
}
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl SubCertificates {
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, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.binary(Lengths::max(800))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0.push(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
certificate: {
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 SupportedEnergyTransferMode {
pub energy_transfer_mode: Vec<EnergyTransferMode>,
}
impl SupportedEnergyTransferMode {
const SHAPE: Shape =
Shape { prod_before: &[0, 1], width: &[1, 1], repeat_width: &[2], min: &[1], max: &[6] };
}
impl SupportedEnergyTransferMode {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let items = &self.energy_transfer_mode;
let count = items.len() as u32;
if count < 1 || count > 6 {
return Err(ExiError::ValueOutOfRange);
}
for (c, item) in items.iter().enumerate() {
w.start(e, 0, c as u32)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), EnergyTransferMode::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; }
if count > 0 {
w.finish(0, count);
}
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl SupportedEnergyTransferMode {
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, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = EnergyTransferMode::from_index(d.nbit(EnergyTransferMode::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0.push(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
energy_transfer_mode: {
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 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(4), 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(4), 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 WeldingDetectionReq {
pub dc_ev_status: DCEVStatus,
}
impl WeldingDetectionReq {
const SHAPE: Shape =
Shape { prod_before: &[0, 1], width: &[1, 1], repeat_width: &[0], min: &[1], max: &[1] };
}
impl WeldingDetectionReq {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.dc_ev_status;
w.start(e, 0, 0)?;
item.encode_body(e)?;
w.finish(0, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl WeldingDetectionReq {
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 = DCEVStatus::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self { dc_ev_status: f_0.ok_or(ExiError::MissingElement)? })
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct WeldingDetectionRes {
pub response_code: ResponseCode,
pub dc_evse_status: DCEVSEStatus,
pub evse_present_voltage: PhysicalValue,
}
impl WeldingDetectionRes {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3],
width: &[1, 1, 1, 1],
repeat_width: &[0, 0, 0],
min: &[1, 1, 1],
max: &[1, 1, 1],
};
}
impl WeldingDetectionRes {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.response_code;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), ResponseCode::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
{
let item = &self.dc_evse_status;
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 1);
}
{
let item = &self.evse_present_voltage;
w.start(e, 2, 0)?;
item.encode_body(e)?;
w.finish(2, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl WeldingDetectionRes {
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 = ResponseCode::from_index(d.nbit(ResponseCode::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = DCEVSEStatus::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
let value = PhysicalValue::decode_body(d)?;
f_2 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
response_code: f_0.ok_or(ExiError::MissingElement)?,
dc_evse_status: f_1.ok_or(ExiError::MissingElement)?,
evse_present_voltage: f_2.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(202), 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(202), 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 ChargeProgress {
Start = 0,
Stop = 1,
Renegotiate = 2,
}
impl ChargeProgress {
pub const WIDTH: u32 = 2;
pub const ALL: [Self; 3] = [Self::Start, Self::Stop, Self::Renegotiate];
#[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::Start,
1 => Self::Stop,
2 => Self::Renegotiate,
_ => return Err(ExiError::UnknownEnumValue),
})
}
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::Start => "Start",
Self::Stop => "Stop",
Self::Renegotiate => "Renegotiate",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[repr(u16)]
pub enum ChargingSession {
Terminate = 0,
Pause = 1,
}
impl ChargingSession {
pub const WIDTH: u32 = 1;
pub const ALL: [Self; 2] = [Self::Terminate, Self::Pause];
#[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::Terminate,
1 => Self::Pause,
_ => return Err(ExiError::UnknownEnumValue),
})
}
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::Terminate => "Terminate",
Self::Pause => "Pause",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[repr(u16)]
pub enum CostKind {
RelativePricePercentage = 0,
RenewableGenerationPercentage = 1,
CarbonDioxideEmission = 2,
}
impl CostKind {
pub const WIDTH: u32 = 2;
pub const ALL: [Self; 3] = [
Self::RelativePricePercentage,
Self::RenewableGenerationPercentage,
Self::CarbonDioxideEmission,
];
#[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::RelativePricePercentage,
1 => Self::RenewableGenerationPercentage,
2 => Self::CarbonDioxideEmission,
_ => return Err(ExiError::UnknownEnumValue),
})
}
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::RelativePricePercentage => "relativePricePercentage",
Self::RenewableGenerationPercentage => "RenewableGenerationPercentage",
Self::CarbonDioxideEmission => "CarbonDioxideEmission",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[repr(u16)]
pub enum FaultCode {
ParsingError = 0,
NoTLSRootCertificatAvailable = 1,
UnknownError = 2,
}
impl FaultCode {
pub const WIDTH: u32 = 2;
pub const ALL: [Self; 3] =
[Self::ParsingError, Self::NoTLSRootCertificatAvailable, Self::UnknownError];
#[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::ParsingError,
1 => Self::NoTLSRootCertificatAvailable,
2 => Self::UnknownError,
_ => return Err(ExiError::UnknownEnumValue),
})
}
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::ParsingError => "ParsingError",
Self::NoTLSRootCertificatAvailable => "NoTLSRootCertificatAvailable",
Self::UnknownError => "UnknownError",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[repr(u16)]
pub enum IsolationLevel {
Invalid = 0,
Valid = 1,
Warning = 2,
Fault = 3,
NoIMD = 4,
}
impl IsolationLevel {
pub const WIDTH: u32 = 3;
pub const ALL: [Self; 5] =
[Self::Invalid, Self::Valid, Self::Warning, Self::Fault, Self::NoIMD];
#[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::Invalid,
1 => Self::Valid,
2 => Self::Warning,
3 => Self::Fault,
4 => Self::NoIMD,
_ => return Err(ExiError::UnknownEnumValue),
})
}
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::Invalid => "Invalid",
Self::Valid => "Valid",
Self::Warning => "Warning",
Self::Fault => "Fault",
Self::NoIMD => "No_IMD",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[repr(u16)]
pub enum PaymentOption {
Contract = 0,
ExternalPayment = 1,
}
impl PaymentOption {
pub const WIDTH: u32 = 1;
pub const ALL: [Self; 2] = [Self::Contract, Self::ExternalPayment];
#[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::Contract,
1 => Self::ExternalPayment,
_ => return Err(ExiError::UnknownEnumValue),
})
}
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::Contract => "Contract",
Self::ExternalPayment => "ExternalPayment",
}
}
}
#[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,
OKNewSessionEstablished = 1,
OKOldSessionJoined = 2,
OKCertificateExpiresSoon = 3,
FAILED = 4,
FAILEDSequenceError = 5,
FAILEDServiceIDInvalid = 6,
FAILEDUnknownSession = 7,
FAILEDServiceSelectionInvalid = 8,
FAILEDPaymentSelectionInvalid = 9,
FAILEDCertificateExpired = 10,
FAILEDSignatureError = 11,
FAILEDNoCertificateAvailable = 12,
FAILEDCertChainError = 13,
FAILEDChallengeInvalid = 14,
FAILEDContractCanceled = 15,
FAILEDWrongChargeParameter = 16,
FAILEDPowerDeliveryNotApplied = 17,
FAILEDTariffSelectionInvalid = 18,
FAILEDChargingProfileInvalid = 19,
FAILEDMeteringSignatureNotValid = 20,
FAILEDNoChargeServiceSelected = 21,
FAILEDWrongEnergyTransferMode = 22,
FAILEDContactorError = 23,
FAILEDCertificateNotAllowedAtThisEVSE = 24,
FAILEDCertificateRevoked = 25,
}
impl ResponseCode {
pub const WIDTH: u32 = 5;
pub const ALL: [Self; 26] = [
Self::OK,
Self::OKNewSessionEstablished,
Self::OKOldSessionJoined,
Self::OKCertificateExpiresSoon,
Self::FAILED,
Self::FAILEDSequenceError,
Self::FAILEDServiceIDInvalid,
Self::FAILEDUnknownSession,
Self::FAILEDServiceSelectionInvalid,
Self::FAILEDPaymentSelectionInvalid,
Self::FAILEDCertificateExpired,
Self::FAILEDSignatureError,
Self::FAILEDNoCertificateAvailable,
Self::FAILEDCertChainError,
Self::FAILEDChallengeInvalid,
Self::FAILEDContractCanceled,
Self::FAILEDWrongChargeParameter,
Self::FAILEDPowerDeliveryNotApplied,
Self::FAILEDTariffSelectionInvalid,
Self::FAILEDChargingProfileInvalid,
Self::FAILEDMeteringSignatureNotValid,
Self::FAILEDNoChargeServiceSelected,
Self::FAILEDWrongEnergyTransferMode,
Self::FAILEDContactorError,
Self::FAILEDCertificateNotAllowedAtThisEVSE,
Self::FAILEDCertificateRevoked,
];
#[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::OKNewSessionEstablished,
2 => Self::OKOldSessionJoined,
3 => Self::OKCertificateExpiresSoon,
4 => Self::FAILED,
5 => Self::FAILEDSequenceError,
6 => Self::FAILEDServiceIDInvalid,
7 => Self::FAILEDUnknownSession,
8 => Self::FAILEDServiceSelectionInvalid,
9 => Self::FAILEDPaymentSelectionInvalid,
10 => Self::FAILEDCertificateExpired,
11 => Self::FAILEDSignatureError,
12 => Self::FAILEDNoCertificateAvailable,
13 => Self::FAILEDCertChainError,
14 => Self::FAILEDChallengeInvalid,
15 => Self::FAILEDContractCanceled,
16 => Self::FAILEDWrongChargeParameter,
17 => Self::FAILEDPowerDeliveryNotApplied,
18 => Self::FAILEDTariffSelectionInvalid,
19 => Self::FAILEDChargingProfileInvalid,
20 => Self::FAILEDMeteringSignatureNotValid,
21 => Self::FAILEDNoChargeServiceSelected,
22 => Self::FAILEDWrongEnergyTransferMode,
23 => Self::FAILEDContactorError,
24 => Self::FAILEDCertificateNotAllowedAtThisEVSE,
25 => Self::FAILEDCertificateRevoked,
_ => return Err(ExiError::UnknownEnumValue),
})
}
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::OK => "OK",
Self::OKNewSessionEstablished => "OK_NewSessionEstablished",
Self::OKOldSessionJoined => "OK_OldSessionJoined",
Self::OKCertificateExpiresSoon => "OK_CertificateExpiresSoon",
Self::FAILED => "FAILED",
Self::FAILEDSequenceError => "FAILED_SequenceError",
Self::FAILEDServiceIDInvalid => "FAILED_ServiceIDInvalid",
Self::FAILEDUnknownSession => "FAILED_UnknownSession",
Self::FAILEDServiceSelectionInvalid => "FAILED_ServiceSelectionInvalid",
Self::FAILEDPaymentSelectionInvalid => "FAILED_PaymentSelectionInvalid",
Self::FAILEDCertificateExpired => "FAILED_CertificateExpired",
Self::FAILEDSignatureError => "FAILED_SignatureError",
Self::FAILEDNoCertificateAvailable => "FAILED_NoCertificateAvailable",
Self::FAILEDCertChainError => "FAILED_CertChainError",
Self::FAILEDChallengeInvalid => "FAILED_ChallengeInvalid",
Self::FAILEDContractCanceled => "FAILED_ContractCanceled",
Self::FAILEDWrongChargeParameter => "FAILED_WrongChargeParameter",
Self::FAILEDPowerDeliveryNotApplied => "FAILED_PowerDeliveryNotApplied",
Self::FAILEDTariffSelectionInvalid => "FAILED_TariffSelectionInvalid",
Self::FAILEDChargingProfileInvalid => "FAILED_ChargingProfileInvalid",
Self::FAILEDMeteringSignatureNotValid => "FAILED_MeteringSignatureNotValid",
Self::FAILEDNoChargeServiceSelected => "FAILED_NoChargeServiceSelected",
Self::FAILEDWrongEnergyTransferMode => "FAILED_WrongEnergyTransferMode",
Self::FAILEDContactorError => "FAILED_ContactorError",
Self::FAILEDCertificateNotAllowedAtThisEVSE => "FAILED_CertificateNotAllowedAtThisEVSE",
Self::FAILEDCertificateRevoked => "FAILED_CertificateRevoked",
}
}
}
impl ResponseCode {
#[must_use]
pub const fn is_ok(self) -> bool {
matches!(
self,
Self::OK
| Self::OKNewSessionEstablished
| Self::OKOldSessionJoined
| Self::OKCertificateExpiresSoon
)
}
#[must_use]
pub const fn is_warning(self) -> bool {
false
}
#[must_use]
pub const fn is_failure(self) -> bool {
matches!(
self,
Self::FAILED
| Self::FAILEDSequenceError
| Self::FAILEDServiceIDInvalid
| Self::FAILEDUnknownSession
| Self::FAILEDServiceSelectionInvalid
| Self::FAILEDPaymentSelectionInvalid
| Self::FAILEDCertificateExpired
| Self::FAILEDSignatureError
| Self::FAILEDNoCertificateAvailable
| Self::FAILEDCertChainError
| Self::FAILEDChallengeInvalid
| Self::FAILEDContractCanceled
| Self::FAILEDWrongChargeParameter
| Self::FAILEDPowerDeliveryNotApplied
| Self::FAILEDTariffSelectionInvalid
| Self::FAILEDChargingProfileInvalid
| Self::FAILEDMeteringSignatureNotValid
| Self::FAILEDNoChargeServiceSelected
| Self::FAILEDWrongEnergyTransferMode
| Self::FAILEDContactorError
| Self::FAILEDCertificateNotAllowedAtThisEVSE
| Self::FAILEDCertificateRevoked
)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[repr(u16)]
pub enum ServiceCategory {
EVCharging = 0,
Internet = 1,
ContractCertificate = 2,
OtherCustom = 3,
}
impl ServiceCategory {
pub const WIDTH: u32 = 2;
pub const ALL: [Self; 4] =
[Self::EVCharging, Self::Internet, Self::ContractCertificate, Self::OtherCustom];
#[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::EVCharging,
1 => Self::Internet,
2 => Self::ContractCertificate,
3 => Self::OtherCustom,
_ => return Err(ExiError::UnknownEnumValue),
})
}
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::EVCharging => "EVCharging",
Self::Internet => "Internet",
Self::ContractCertificate => "ContractCertificate",
Self::OtherCustom => "OtherCustom",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[repr(u16)]
pub enum UnitSymbol {
H = 0,
M = 1,
S = 2,
A = 3,
V = 4,
W = 5,
Wh = 6,
}
impl UnitSymbol {
pub const WIDTH: u32 = 3;
pub const ALL: [Self; 7] = [Self::H, Self::M, Self::S, Self::A, Self::V, Self::W, Self::Wh];
#[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::H,
1 => Self::M,
2 => Self::S,
3 => Self::A,
4 => Self::V,
5 => Self::W,
6 => Self::Wh,
_ => return Err(ExiError::UnknownEnumValue),
})
}
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::H => "h",
Self::M => "m",
Self::S => "s",
Self::A => "A",
Self::V => "V",
Self::W => "W",
Self::Wh => "Wh",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[repr(u16)]
pub enum Value {
Bool = 0,
Byte = 1,
Short = 2,
Int = 3,
PhysicalValue = 4,
String = 5,
}
impl Value {
pub const WIDTH: u32 = 3;
pub const ALL: [Self; 6] =
[Self::Bool, Self::Byte, Self::Short, Self::Int, Self::PhysicalValue, Self::String];
#[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::Bool,
1 => Self::Byte,
2 => Self::Short,
3 => Self::Int,
4 => Self::PhysicalValue,
5 => Self::String,
_ => return Err(ExiError::UnknownEnumValue),
})
}
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::Bool => "bool",
Self::Byte => "byte",
Self::Short => "short",
Self::Int => "int",
Self::PhysicalValue => "physicalValue",
Self::String => "string",
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct V2GMessage {
pub header: MessageHeader,
pub body: Body,
}
impl V2GMessage {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 1, 1],
repeat_width: &[0, 0],
min: &[1, 1],
max: &[1, 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);
}
{
let item = &self.body;
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 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;
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, .. } => {
let value = Body::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
header: f_0.ok_or(ExiError::MissingElement)?,
body: f_1.ok_or(ExiError::MissingElement)?,
})
}
}
pub const DOCUMENT_WIDTH: u32 = 7;
pub const FRAGMENT_WIDTH: u32 = 8;
pub const FRAGMENT_ED_CODE: u64 = 244;
pub const XMLDSIG_FRAGMENT_WIDTH: u32 = 6;
pub const XMLDSIG_FRAGMENT_ED_CODE: u64 = 46;
impl ACEVChargeParameter {
pub const DOCUMENT_CODE: u64 = 0;
}
impl crate::exi::ExiDocument for ACEVChargeParameter {
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 ACEVSEChargeParameter {
pub const DOCUMENT_CODE: u64 = 1;
}
impl crate::exi::ExiDocument for ACEVSEChargeParameter {
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 ACEVSEStatus {
pub const DOCUMENT_CODE: u64 = 2;
}
impl crate::exi::ExiDocument for ACEVSEStatus {
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 AuthorizationReq {
pub const DOCUMENT_CODE: u64 = 3;
}
impl crate::exi::ExiDocument for AuthorizationReq {
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 AuthorizationRes {
pub const DOCUMENT_CODE: u64 = 4;
}
impl crate::exi::ExiDocument for AuthorizationRes {
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 BodyBase {
pub const DOCUMENT_CODE: u64 = 5;
}
impl crate::exi::ExiDocument for BodyBase {
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 CableCheckReq {
pub const DOCUMENT_CODE: u64 = 6;
}
impl crate::exi::ExiDocument for CableCheckReq {
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 CableCheckRes {
pub const DOCUMENT_CODE: u64 = 7;
}
impl crate::exi::ExiDocument for CableCheckRes {
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 = 8;
}
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 CertificateInstallationReq {
pub const DOCUMENT_CODE: u64 = 9;
}
impl crate::exi::ExiDocument for CertificateInstallationReq {
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 CertificateInstallationRes {
pub const DOCUMENT_CODE: u64 = 10;
}
impl crate::exi::ExiDocument for CertificateInstallationRes {
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 CertificateUpdateReq {
pub const DOCUMENT_CODE: u64 = 11;
}
impl crate::exi::ExiDocument for CertificateUpdateReq {
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 CertificateUpdateRes {
pub const DOCUMENT_CODE: u64 = 12;
}
impl crate::exi::ExiDocument for CertificateUpdateRes {
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 ChargeParameterDiscoveryReq {
pub const DOCUMENT_CODE: u64 = 13;
}
impl crate::exi::ExiDocument for ChargeParameterDiscoveryReq {
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 ChargeParameterDiscoveryRes {
pub const DOCUMENT_CODE: u64 = 14;
}
impl crate::exi::ExiDocument for ChargeParameterDiscoveryRes {
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 ChargingStatusReq {
pub const DOCUMENT_CODE: u64 = 15;
}
impl crate::exi::ExiDocument for ChargingStatusReq {
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 ChargingStatusRes {
pub const DOCUMENT_CODE: u64 = 16;
}
impl crate::exi::ExiDocument for ChargingStatusRes {
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 CurrentDemandReq {
pub const DOCUMENT_CODE: u64 = 17;
}
impl crate::exi::ExiDocument for CurrentDemandReq {
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 CurrentDemandRes {
pub const DOCUMENT_CODE: u64 = 18;
}
impl crate::exi::ExiDocument for CurrentDemandRes {
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 DCEVChargeParameter {
pub const DOCUMENT_CODE: u64 = 19;
}
impl crate::exi::ExiDocument for DCEVChargeParameter {
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 DCEVPowerDeliveryParameter {
pub const DOCUMENT_CODE: u64 = 20;
}
impl crate::exi::ExiDocument for DCEVPowerDeliveryParameter {
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 DCEVSEChargeParameter {
pub const DOCUMENT_CODE: u64 = 21;
}
impl crate::exi::ExiDocument for DCEVSEChargeParameter {
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 DCEVSEStatus {
pub const DOCUMENT_CODE: u64 = 22;
}
impl crate::exi::ExiDocument for DCEVSEStatus {
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 DCEVStatus {
pub const DOCUMENT_CODE: u64 = 23;
}
impl crate::exi::ExiDocument for DCEVStatus {
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 = 25;
}
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 EVChargeParameter {
pub const DOCUMENT_CODE: u64 = 27;
}
impl crate::exi::ExiDocument for EVChargeParameter {
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 EVPowerDeliveryParameter {
pub const DOCUMENT_CODE: u64 = 28;
}
impl crate::exi::ExiDocument for EVPowerDeliveryParameter {
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 EVSEChargeParameter {
pub const DOCUMENT_CODE: u64 = 29;
}
impl crate::exi::ExiDocument for EVSEChargeParameter {
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 EVSEStatus {
pub const DOCUMENT_CODE: u64 = 30;
}
impl crate::exi::ExiDocument for EVSEStatus {
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 EVStatus {
pub const DOCUMENT_CODE: u64 = 31;
}
impl crate::exi::ExiDocument for EVStatus {
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 Entry {
pub const DOCUMENT_CODE: u64 = 32;
}
impl crate::exi::ExiDocument for Entry {
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 = 36;
}
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 MeteringReceiptReq {
pub const DOCUMENT_CODE: u64 = 37;
}
impl crate::exi::ExiDocument for MeteringReceiptReq {
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 MeteringReceiptRes {
pub const DOCUMENT_CODE: u64 = 38;
}
impl crate::exi::ExiDocument for MeteringReceiptRes {
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 PMaxScheduleEntry {
pub const DOCUMENT_CODE: u64 = 42;
}
impl crate::exi::ExiDocument for PMaxScheduleEntry {
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 PaymentDetailsReq {
pub const DOCUMENT_CODE: u64 = 43;
}
impl crate::exi::ExiDocument for PaymentDetailsReq {
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 PaymentDetailsRes {
pub const DOCUMENT_CODE: u64 = 44;
}
impl crate::exi::ExiDocument for PaymentDetailsRes {
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 PaymentServiceSelectionReq {
pub const DOCUMENT_CODE: u64 = 45;
}
impl crate::exi::ExiDocument for PaymentServiceSelectionReq {
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 PaymentServiceSelectionRes {
pub const DOCUMENT_CODE: u64 = 46;
}
impl crate::exi::ExiDocument for PaymentServiceSelectionRes {
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 PowerDeliveryReq {
pub const DOCUMENT_CODE: u64 = 47;
}
impl crate::exi::ExiDocument for PowerDeliveryReq {
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 PowerDeliveryRes {
pub const DOCUMENT_CODE: u64 = 48;
}
impl crate::exi::ExiDocument for PowerDeliveryRes {
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 PreChargeReq {
pub const DOCUMENT_CODE: u64 = 49;
}
impl crate::exi::ExiDocument for PreChargeReq {
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 PreChargeRes {
pub const DOCUMENT_CODE: u64 = 50;
}
impl crate::exi::ExiDocument for PreChargeRes {
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 = 51;
}
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 = 52;
}
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 RelativeTimeInterval {
pub const DOCUMENT_CODE: u64 = 53;
}
impl crate::exi::ExiDocument for RelativeTimeInterval {
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 = 54;
}
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 SAScheduleList {
pub const DOCUMENT_CODE: u64 = 55;
}
impl crate::exi::ExiDocument for SAScheduleList {
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 SASchedules {
pub const DOCUMENT_CODE: u64 = 56;
}
impl crate::exi::ExiDocument for SASchedules {
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 SalesTariffEntry {
pub const DOCUMENT_CODE: u64 = 58;
}
impl crate::exi::ExiDocument for SalesTariffEntry {
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 ServiceDetailReq {
pub const DOCUMENT_CODE: u64 = 59;
}
impl crate::exi::ExiDocument for ServiceDetailReq {
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 ServiceDetailRes {
pub const DOCUMENT_CODE: u64 = 60;
}
impl crate::exi::ExiDocument for ServiceDetailRes {
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 ServiceDiscoveryReq {
pub const DOCUMENT_CODE: u64 = 61;
}
impl crate::exi::ExiDocument for ServiceDiscoveryReq {
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 ServiceDiscoveryRes {
pub const DOCUMENT_CODE: u64 = 62;
}
impl crate::exi::ExiDocument for ServiceDiscoveryRes {
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 SessionSetupReq {
pub const DOCUMENT_CODE: u64 = 63;
}
impl crate::exi::ExiDocument for SessionSetupReq {
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 SessionSetupRes {
pub const DOCUMENT_CODE: u64 = 64;
}
impl crate::exi::ExiDocument for SessionSetupRes {
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 SessionStopReq {
pub const DOCUMENT_CODE: u64 = 65;
}
impl crate::exi::ExiDocument for SessionStopReq {
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 SessionStopRes {
pub const DOCUMENT_CODE: u64 = 66;
}
impl crate::exi::ExiDocument for SessionStopRes {
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 = 67;
}
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 = 68;
}
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 = 71;
}
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 = 72;
}
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 Interval {
pub const DOCUMENT_CODE: u64 = 73;
}
impl crate::exi::ExiDocument for Interval {
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 = 74;
}
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 = 75;
}
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)
}
}
impl V2GMessage {
pub const DOCUMENT_CODE: u64 = 76;
}
impl crate::exi::ExiDocument for V2GMessage {
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 WeldingDetectionReq {
pub const DOCUMENT_CODE: u64 = 77;
}
impl crate::exi::ExiDocument for WeldingDetectionReq {
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 WeldingDetectionRes {
pub const DOCUMENT_CODE: u64 = 78;
}
impl crate::exi::ExiDocument for WeldingDetectionRes {
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 {
ACEVChargeParameter(ACEVChargeParameter),
ACEVSEChargeParameter(ACEVSEChargeParameter),
ACEVSEStatus(ACEVSEStatus),
AuthorizationReq(AuthorizationReq),
AuthorizationRes(AuthorizationRes),
BodyElement(BodyBase),
CableCheckReq(CableCheckReq),
CableCheckRes(CableCheckRes),
CanonicalizationMethod(CanonicalizationMethod),
CertificateInstallationReq(CertificateInstallationReq),
CertificateInstallationRes(CertificateInstallationRes),
CertificateUpdateReq(CertificateUpdateReq),
CertificateUpdateRes(CertificateUpdateRes),
ChargeParameterDiscoveryReq(ChargeParameterDiscoveryReq),
ChargeParameterDiscoveryRes(ChargeParameterDiscoveryRes),
ChargingStatusReq(ChargingStatusReq),
ChargingStatusRes(ChargingStatusRes),
CurrentDemandReq(CurrentDemandReq),
CurrentDemandRes(CurrentDemandRes),
DCEVChargeParameter(DCEVChargeParameter),
DCEVPowerDeliveryParameter(DCEVPowerDeliveryParameter),
DCEVSEChargeParameter(DCEVSEChargeParameter),
DCEVSEStatus(DCEVSEStatus),
DCEVStatus(DCEVStatus),
DigestMethod(DigestMethod),
EVChargeParameter(EVChargeParameter),
EVPowerDeliveryParameter(EVPowerDeliveryParameter),
EVSEChargeParameter(EVSEChargeParameter),
EVSEStatus(EVSEStatus),
EVStatus(EVStatus),
Entry(Entry),
Manifest(Manifest),
MeteringReceiptReq(MeteringReceiptReq),
MeteringReceiptRes(MeteringReceiptRes),
PMaxScheduleEntry(PMaxScheduleEntry),
PaymentDetailsReq(PaymentDetailsReq),
PaymentDetailsRes(PaymentDetailsRes),
PaymentServiceSelectionReq(PaymentServiceSelectionReq),
PaymentServiceSelectionRes(PaymentServiceSelectionRes),
PowerDeliveryReq(PowerDeliveryReq),
PowerDeliveryRes(PowerDeliveryRes),
PreChargeReq(PreChargeReq),
PreChargeRes(PreChargeRes),
RSAKeyValue(RSAKeyValue),
Reference(Reference),
RelativeTimeInterval(RelativeTimeInterval),
RetrievalMethod(RetrievalMethod),
SAScheduleList(SAScheduleList),
SASchedules(SASchedules),
SalesTariffEntry(SalesTariffEntry),
ServiceDetailReq(ServiceDetailReq),
ServiceDetailRes(ServiceDetailRes),
ServiceDiscoveryReq(ServiceDiscoveryReq),
ServiceDiscoveryRes(ServiceDiscoveryRes),
SessionSetupReq(SessionSetupReq),
SessionSetupRes(SessionSetupRes),
SessionStopReq(SessionStopReq),
SessionStopRes(SessionStopRes),
Signature(Signature),
SignatureMethod(SignatureMethod),
SignatureValue(SignatureValue),
SignedInfo(SignedInfo),
TimeInterval(Interval),
Transform(Transform),
Transforms(Transforms),
V2GMessage(V2GMessage),
WeldingDetectionReq(WeldingDetectionReq),
WeldingDetectionRes(WeldingDetectionRes),
}
impl Document {
#[must_use]
pub const fn name(&self) -> &'static str {
match self {
Self::ACEVChargeParameter(_) => "AC_EVChargeParameter",
Self::ACEVSEChargeParameter(_) => "AC_EVSEChargeParameter",
Self::ACEVSEStatus(_) => "AC_EVSEStatus",
Self::AuthorizationReq(_) => "AuthorizationReq",
Self::AuthorizationRes(_) => "AuthorizationRes",
Self::BodyElement(_) => "BodyElement",
Self::CableCheckReq(_) => "CableCheckReq",
Self::CableCheckRes(_) => "CableCheckRes",
Self::CanonicalizationMethod(_) => "CanonicalizationMethod",
Self::CertificateInstallationReq(_) => "CertificateInstallationReq",
Self::CertificateInstallationRes(_) => "CertificateInstallationRes",
Self::CertificateUpdateReq(_) => "CertificateUpdateReq",
Self::CertificateUpdateRes(_) => "CertificateUpdateRes",
Self::ChargeParameterDiscoveryReq(_) => "ChargeParameterDiscoveryReq",
Self::ChargeParameterDiscoveryRes(_) => "ChargeParameterDiscoveryRes",
Self::ChargingStatusReq(_) => "ChargingStatusReq",
Self::ChargingStatusRes(_) => "ChargingStatusRes",
Self::CurrentDemandReq(_) => "CurrentDemandReq",
Self::CurrentDemandRes(_) => "CurrentDemandRes",
Self::DCEVChargeParameter(_) => "DC_EVChargeParameter",
Self::DCEVPowerDeliveryParameter(_) => "DC_EVPowerDeliveryParameter",
Self::DCEVSEChargeParameter(_) => "DC_EVSEChargeParameter",
Self::DCEVSEStatus(_) => "DC_EVSEStatus",
Self::DCEVStatus(_) => "DC_EVStatus",
Self::DigestMethod(_) => "DigestMethod",
Self::EVChargeParameter(_) => "EVChargeParameter",
Self::EVPowerDeliveryParameter(_) => "EVPowerDeliveryParameter",
Self::EVSEChargeParameter(_) => "EVSEChargeParameter",
Self::EVSEStatus(_) => "EVSEStatus",
Self::EVStatus(_) => "EVStatus",
Self::Entry(_) => "Entry",
Self::Manifest(_) => "Manifest",
Self::MeteringReceiptReq(_) => "MeteringReceiptReq",
Self::MeteringReceiptRes(_) => "MeteringReceiptRes",
Self::PMaxScheduleEntry(_) => "PMaxScheduleEntry",
Self::PaymentDetailsReq(_) => "PaymentDetailsReq",
Self::PaymentDetailsRes(_) => "PaymentDetailsRes",
Self::PaymentServiceSelectionReq(_) => "PaymentServiceSelectionReq",
Self::PaymentServiceSelectionRes(_) => "PaymentServiceSelectionRes",
Self::PowerDeliveryReq(_) => "PowerDeliveryReq",
Self::PowerDeliveryRes(_) => "PowerDeliveryRes",
Self::PreChargeReq(_) => "PreChargeReq",
Self::PreChargeRes(_) => "PreChargeRes",
Self::RSAKeyValue(_) => "RSAKeyValue",
Self::Reference(_) => "Reference",
Self::RelativeTimeInterval(_) => "RelativeTimeInterval",
Self::RetrievalMethod(_) => "RetrievalMethod",
Self::SAScheduleList(_) => "SAScheduleList",
Self::SASchedules(_) => "SASchedules",
Self::SalesTariffEntry(_) => "SalesTariffEntry",
Self::ServiceDetailReq(_) => "ServiceDetailReq",
Self::ServiceDetailRes(_) => "ServiceDetailRes",
Self::ServiceDiscoveryReq(_) => "ServiceDiscoveryReq",
Self::ServiceDiscoveryRes(_) => "ServiceDiscoveryRes",
Self::SessionSetupReq(_) => "SessionSetupReq",
Self::SessionSetupRes(_) => "SessionSetupRes",
Self::SessionStopReq(_) => "SessionStopReq",
Self::SessionStopRes(_) => "SessionStopRes",
Self::Signature(_) => "Signature",
Self::SignatureMethod(_) => "SignatureMethod",
Self::SignatureValue(_) => "SignatureValue",
Self::SignedInfo(_) => "SignedInfo",
Self::TimeInterval(_) => "TimeInterval",
Self::Transform(_) => "Transform",
Self::Transforms(_) => "Transforms",
Self::V2GMessage(_) => "V2G_Message",
Self::WeldingDetectionReq(_) => "WeldingDetectionReq",
Self::WeldingDetectionRes(_) => "WeldingDetectionRes",
}
}
#[must_use]
pub const fn code(&self) -> u64 {
match self {
Self::ACEVChargeParameter(_) => 0,
Self::ACEVSEChargeParameter(_) => 1,
Self::ACEVSEStatus(_) => 2,
Self::AuthorizationReq(_) => 3,
Self::AuthorizationRes(_) => 4,
Self::BodyElement(_) => 5,
Self::CableCheckReq(_) => 6,
Self::CableCheckRes(_) => 7,
Self::CanonicalizationMethod(_) => 8,
Self::CertificateInstallationReq(_) => 9,
Self::CertificateInstallationRes(_) => 10,
Self::CertificateUpdateReq(_) => 11,
Self::CertificateUpdateRes(_) => 12,
Self::ChargeParameterDiscoveryReq(_) => 13,
Self::ChargeParameterDiscoveryRes(_) => 14,
Self::ChargingStatusReq(_) => 15,
Self::ChargingStatusRes(_) => 16,
Self::CurrentDemandReq(_) => 17,
Self::CurrentDemandRes(_) => 18,
Self::DCEVChargeParameter(_) => 19,
Self::DCEVPowerDeliveryParameter(_) => 20,
Self::DCEVSEChargeParameter(_) => 21,
Self::DCEVSEStatus(_) => 22,
Self::DCEVStatus(_) => 23,
Self::DigestMethod(_) => 25,
Self::EVChargeParameter(_) => 27,
Self::EVPowerDeliveryParameter(_) => 28,
Self::EVSEChargeParameter(_) => 29,
Self::EVSEStatus(_) => 30,
Self::EVStatus(_) => 31,
Self::Entry(_) => 32,
Self::Manifest(_) => 36,
Self::MeteringReceiptReq(_) => 37,
Self::MeteringReceiptRes(_) => 38,
Self::PMaxScheduleEntry(_) => 42,
Self::PaymentDetailsReq(_) => 43,
Self::PaymentDetailsRes(_) => 44,
Self::PaymentServiceSelectionReq(_) => 45,
Self::PaymentServiceSelectionRes(_) => 46,
Self::PowerDeliveryReq(_) => 47,
Self::PowerDeliveryRes(_) => 48,
Self::PreChargeReq(_) => 49,
Self::PreChargeRes(_) => 50,
Self::RSAKeyValue(_) => 51,
Self::Reference(_) => 52,
Self::RelativeTimeInterval(_) => 53,
Self::RetrievalMethod(_) => 54,
Self::SAScheduleList(_) => 55,
Self::SASchedules(_) => 56,
Self::SalesTariffEntry(_) => 58,
Self::ServiceDetailReq(_) => 59,
Self::ServiceDetailRes(_) => 60,
Self::ServiceDiscoveryReq(_) => 61,
Self::ServiceDiscoveryRes(_) => 62,
Self::SessionSetupReq(_) => 63,
Self::SessionSetupRes(_) => 64,
Self::SessionStopReq(_) => 65,
Self::SessionStopRes(_) => 66,
Self::Signature(_) => 67,
Self::SignatureMethod(_) => 68,
Self::SignatureValue(_) => 71,
Self::SignedInfo(_) => 72,
Self::TimeInterval(_) => 73,
Self::Transform(_) => 74,
Self::Transforms(_) => 75,
Self::V2GMessage(_) => 76,
Self::WeldingDetectionReq(_) => 77,
Self::WeldingDetectionRes(_) => 78,
}
}
}
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::ACEVChargeParameter(m) => m.encode_body(&mut e)?,
Self::ACEVSEChargeParameter(m) => m.encode_body(&mut e)?,
Self::ACEVSEStatus(m) => m.encode_body(&mut e)?,
Self::AuthorizationReq(m) => m.encode_body(&mut e)?,
Self::AuthorizationRes(m) => m.encode_body(&mut e)?,
Self::BodyElement(m) => m.encode_body(&mut e)?,
Self::CableCheckReq(m) => m.encode_body(&mut e)?,
Self::CableCheckRes(m) => m.encode_body(&mut e)?,
Self::CanonicalizationMethod(m) => m.encode_body(&mut e)?,
Self::CertificateInstallationReq(m) => m.encode_body(&mut e)?,
Self::CertificateInstallationRes(m) => m.encode_body(&mut e)?,
Self::CertificateUpdateReq(m) => m.encode_body(&mut e)?,
Self::CertificateUpdateRes(m) => m.encode_body(&mut e)?,
Self::ChargeParameterDiscoveryReq(m) => m.encode_body(&mut e)?,
Self::ChargeParameterDiscoveryRes(m) => m.encode_body(&mut e)?,
Self::ChargingStatusReq(m) => m.encode_body(&mut e)?,
Self::ChargingStatusRes(m) => m.encode_body(&mut e)?,
Self::CurrentDemandReq(m) => m.encode_body(&mut e)?,
Self::CurrentDemandRes(m) => m.encode_body(&mut e)?,
Self::DCEVChargeParameter(m) => m.encode_body(&mut e)?,
Self::DCEVPowerDeliveryParameter(m) => m.encode_body(&mut e)?,
Self::DCEVSEChargeParameter(m) => m.encode_body(&mut e)?,
Self::DCEVSEStatus(m) => m.encode_body(&mut e)?,
Self::DCEVStatus(m) => m.encode_body(&mut e)?,
Self::DigestMethod(m) => m.encode_body(&mut e)?,
Self::EVChargeParameter(m) => m.encode_body(&mut e)?,
Self::EVPowerDeliveryParameter(m) => m.encode_body(&mut e)?,
Self::EVSEChargeParameter(m) => m.encode_body(&mut e)?,
Self::EVSEStatus(m) => m.encode_body(&mut e)?,
Self::EVStatus(m) => m.encode_body(&mut e)?,
Self::Entry(m) => m.encode_body(&mut e)?,
Self::Manifest(m) => m.encode_body(&mut e)?,
Self::MeteringReceiptReq(m) => m.encode_body(&mut e)?,
Self::MeteringReceiptRes(m) => m.encode_body(&mut e)?,
Self::PMaxScheduleEntry(m) => m.encode_body(&mut e)?,
Self::PaymentDetailsReq(m) => m.encode_body(&mut e)?,
Self::PaymentDetailsRes(m) => m.encode_body(&mut e)?,
Self::PaymentServiceSelectionReq(m) => m.encode_body(&mut e)?,
Self::PaymentServiceSelectionRes(m) => m.encode_body(&mut e)?,
Self::PowerDeliveryReq(m) => m.encode_body(&mut e)?,
Self::PowerDeliveryRes(m) => m.encode_body(&mut e)?,
Self::PreChargeReq(m) => m.encode_body(&mut e)?,
Self::PreChargeRes(m) => m.encode_body(&mut e)?,
Self::RSAKeyValue(m) => m.encode_body(&mut e)?,
Self::Reference(m) => m.encode_body(&mut e)?,
Self::RelativeTimeInterval(m) => m.encode_body(&mut e)?,
Self::RetrievalMethod(m) => m.encode_body(&mut e)?,
Self::SAScheduleList(m) => m.encode_body(&mut e)?,
Self::SASchedules(m) => m.encode_body(&mut e)?,
Self::SalesTariffEntry(m) => m.encode_body(&mut e)?,
Self::ServiceDetailReq(m) => m.encode_body(&mut e)?,
Self::ServiceDetailRes(m) => m.encode_body(&mut e)?,
Self::ServiceDiscoveryReq(m) => m.encode_body(&mut e)?,
Self::ServiceDiscoveryRes(m) => m.encode_body(&mut e)?,
Self::SessionSetupReq(m) => m.encode_body(&mut e)?,
Self::SessionSetupRes(m) => m.encode_body(&mut e)?,
Self::SessionStopReq(m) => m.encode_body(&mut e)?,
Self::SessionStopRes(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::TimeInterval(m) => m.encode_body(&mut e)?,
Self::Transform(m) => m.encode_body(&mut e)?,
Self::Transforms(m) => m.encode_body(&mut e)?,
Self::V2GMessage(m) => m.encode_body(&mut e)?,
Self::WeldingDetectionReq(m) => m.encode_body(&mut e)?,
Self::WeldingDetectionRes(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::ACEVChargeParameter(ACEVChargeParameter::decode_body(&mut d)?),
1 => Self::ACEVSEChargeParameter(ACEVSEChargeParameter::decode_body(&mut d)?),
2 => Self::ACEVSEStatus(ACEVSEStatus::decode_body(&mut d)?),
3 => Self::AuthorizationReq(AuthorizationReq::decode_body(&mut d)?),
4 => Self::AuthorizationRes(AuthorizationRes::decode_body(&mut d)?),
5 => Self::BodyElement(BodyBase::decode_body(&mut d)?),
6 => Self::CableCheckReq(CableCheckReq::decode_body(&mut d)?),
7 => Self::CableCheckRes(CableCheckRes::decode_body(&mut d)?),
8 => Self::CanonicalizationMethod(CanonicalizationMethod::decode_body(&mut d)?),
9 => Self::CertificateInstallationReq(CertificateInstallationReq::decode_body(&mut d)?),
10 => {
Self::CertificateInstallationRes(CertificateInstallationRes::decode_body(&mut d)?)
}
11 => Self::CertificateUpdateReq(CertificateUpdateReq::decode_body(&mut d)?),
12 => Self::CertificateUpdateRes(CertificateUpdateRes::decode_body(&mut d)?),
13 => {
Self::ChargeParameterDiscoveryReq(ChargeParameterDiscoveryReq::decode_body(&mut d)?)
}
14 => {
Self::ChargeParameterDiscoveryRes(ChargeParameterDiscoveryRes::decode_body(&mut d)?)
}
15 => Self::ChargingStatusReq(ChargingStatusReq::decode_body(&mut d)?),
16 => Self::ChargingStatusRes(ChargingStatusRes::decode_body(&mut d)?),
17 => Self::CurrentDemandReq(CurrentDemandReq::decode_body(&mut d)?),
18 => Self::CurrentDemandRes(CurrentDemandRes::decode_body(&mut d)?),
19 => Self::DCEVChargeParameter(DCEVChargeParameter::decode_body(&mut d)?),
20 => {
Self::DCEVPowerDeliveryParameter(DCEVPowerDeliveryParameter::decode_body(&mut d)?)
}
21 => Self::DCEVSEChargeParameter(DCEVSEChargeParameter::decode_body(&mut d)?),
22 => Self::DCEVSEStatus(DCEVSEStatus::decode_body(&mut d)?),
23 => Self::DCEVStatus(DCEVStatus::decode_body(&mut d)?),
25 => Self::DigestMethod(DigestMethod::decode_body(&mut d)?),
27 => Self::EVChargeParameter(EVChargeParameter::decode_body(&mut d)?),
28 => Self::EVPowerDeliveryParameter(EVPowerDeliveryParameter::decode_body(&mut d)?),
29 => Self::EVSEChargeParameter(EVSEChargeParameter::decode_body(&mut d)?),
30 => Self::EVSEStatus(EVSEStatus::decode_body(&mut d)?),
31 => Self::EVStatus(EVStatus::decode_body(&mut d)?),
32 => Self::Entry(Entry::decode_body(&mut d)?),
36 => Self::Manifest(Manifest::decode_body(&mut d)?),
37 => Self::MeteringReceiptReq(MeteringReceiptReq::decode_body(&mut d)?),
38 => Self::MeteringReceiptRes(MeteringReceiptRes::decode_body(&mut d)?),
42 => Self::PMaxScheduleEntry(PMaxScheduleEntry::decode_body(&mut d)?),
43 => Self::PaymentDetailsReq(PaymentDetailsReq::decode_body(&mut d)?),
44 => Self::PaymentDetailsRes(PaymentDetailsRes::decode_body(&mut d)?),
45 => {
Self::PaymentServiceSelectionReq(PaymentServiceSelectionReq::decode_body(&mut d)?)
}
46 => {
Self::PaymentServiceSelectionRes(PaymentServiceSelectionRes::decode_body(&mut d)?)
}
47 => Self::PowerDeliveryReq(PowerDeliveryReq::decode_body(&mut d)?),
48 => Self::PowerDeliveryRes(PowerDeliveryRes::decode_body(&mut d)?),
49 => Self::PreChargeReq(PreChargeReq::decode_body(&mut d)?),
50 => Self::PreChargeRes(PreChargeRes::decode_body(&mut d)?),
51 => Self::RSAKeyValue(RSAKeyValue::decode_body(&mut d)?),
52 => Self::Reference(Reference::decode_body(&mut d)?),
53 => Self::RelativeTimeInterval(RelativeTimeInterval::decode_body(&mut d)?),
54 => Self::RetrievalMethod(RetrievalMethod::decode_body(&mut d)?),
55 => Self::SAScheduleList(SAScheduleList::decode_body(&mut d)?),
56 => Self::SASchedules(SASchedules::decode_body(&mut d)?),
58 => Self::SalesTariffEntry(SalesTariffEntry::decode_body(&mut d)?),
59 => Self::ServiceDetailReq(ServiceDetailReq::decode_body(&mut d)?),
60 => Self::ServiceDetailRes(ServiceDetailRes::decode_body(&mut d)?),
61 => Self::ServiceDiscoveryReq(ServiceDiscoveryReq::decode_body(&mut d)?),
62 => Self::ServiceDiscoveryRes(ServiceDiscoveryRes::decode_body(&mut d)?),
63 => Self::SessionSetupReq(SessionSetupReq::decode_body(&mut d)?),
64 => Self::SessionSetupRes(SessionSetupRes::decode_body(&mut d)?),
65 => Self::SessionStopReq(SessionStopReq::decode_body(&mut d)?),
66 => Self::SessionStopRes(SessionStopRes::decode_body(&mut d)?),
67 => Self::Signature(Signature::decode_body(&mut d)?),
68 => Self::SignatureMethod(SignatureMethod::decode_body(&mut d)?),
71 => Self::SignatureValue(SignatureValue::decode_body(&mut d)?),
72 => Self::SignedInfo(SignedInfo::decode_body(&mut d)?),
73 => Self::TimeInterval(Interval::decode_body(&mut d)?),
74 => Self::Transform(Transform::decode_body(&mut d)?),
75 => Self::Transforms(Transforms::decode_body(&mut d)?),
76 => Self::V2GMessage(V2GMessage::decode_body(&mut d)?),
77 => Self::WeldingDetectionReq(WeldingDetectionReq::decode_body(&mut d)?),
78 => Self::WeldingDetectionRes(WeldingDetectionRes::decode_body(&mut d)?),
_ => return Err(ExiError::UnknownEventCode),
};
d.finish()?;
Ok(value)
}
}
impl Document {
#[must_use]
pub const fn response_code(&self) -> Option<ResponseCode> {
match self {
Self::AuthorizationRes(m) => Some(m.response_code),
Self::CableCheckRes(m) => Some(m.response_code),
Self::CertificateInstallationRes(m) => Some(m.response_code),
Self::CertificateUpdateRes(m) => Some(m.response_code),
Self::ChargeParameterDiscoveryRes(m) => Some(m.response_code),
Self::ChargingStatusRes(m) => Some(m.response_code),
Self::CurrentDemandRes(m) => Some(m.response_code),
Self::MeteringReceiptRes(m) => Some(m.response_code),
Self::PaymentDetailsRes(m) => Some(m.response_code),
Self::PaymentServiceSelectionRes(m) => Some(m.response_code),
Self::PowerDeliveryRes(m) => Some(m.response_code),
Self::PreChargeRes(m) => Some(m.response_code),
Self::ServiceDetailRes(m) => Some(m.response_code),
Self::ServiceDiscoveryRes(m) => Some(m.response_code),
Self::SessionSetupRes(m) => Some(m.response_code),
Self::SessionStopRes(m) => Some(m.response_code),
Self::WeldingDetectionRes(m) => Some(m.response_code),
_ => None,
}
}
}
impl Document {
#[must_use]
pub const fn fragment_code(&self) -> u64 {
match self {
Self::ACEVChargeParameter(_) => 0,
Self::ACEVSEChargeParameter(_) => 1,
Self::ACEVSEStatus(_) => 3,
Self::AuthorizationReq(_) => 4,
Self::AuthorizationRes(_) => 5,
Self::BodyElement(_) => 7,
Self::CableCheckReq(_) => 11,
Self::CableCheckRes(_) => 12,
Self::CanonicalizationMethod(_) => 13,
Self::CertificateInstallationReq(_) => 15,
Self::CertificateInstallationRes(_) => 16,
Self::CertificateUpdateReq(_) => 17,
Self::CertificateUpdateRes(_) => 18,
Self::ChargeParameterDiscoveryReq(_) => 19,
Self::ChargeParameterDiscoveryRes(_) => 20,
Self::ChargingStatusReq(_) => 30,
Self::ChargingStatusRes(_) => 31,
Self::CurrentDemandReq(_) => 36,
Self::CurrentDemandRes(_) => 37,
Self::DCEVChargeParameter(_) => 38,
Self::DCEVPowerDeliveryParameter(_) => 39,
Self::DCEVSEChargeParameter(_) => 40,
Self::DCEVSEStatus(_) => 42,
Self::DCEVStatus(_) => 44,
Self::DigestMethod(_) => 48,
Self::EVChargeParameter(_) => 53,
Self::EVPowerDeliveryParameter(_) => 66,
Self::EVSEChargeParameter(_) => 69,
Self::EVSEStatus(_) => 92,
Self::EVStatus(_) => 96,
Self::Entry(_) => 100,
Self::Manifest(_) => 115,
Self::MeteringReceiptReq(_) => 121,
Self::MeteringReceiptRes(_) => 122,
Self::PMaxScheduleEntry(_) => 137,
Self::PaymentDetailsReq(_) => 141,
Self::PaymentDetailsRes(_) => 142,
Self::PaymentServiceSelectionReq(_) => 145,
Self::PaymentServiceSelectionRes(_) => 146,
Self::PowerDeliveryReq(_) => 148,
Self::PowerDeliveryRes(_) => 149,
Self::PreChargeReq(_) => 150,
Self::PreChargeRes(_) => 151,
Self::RSAKeyValue(_) => 155,
Self::Reference(_) => 157,
Self::RelativeTimeInterval(_) => 158,
Self::RetrievalMethod(_) => 163,
Self::SAScheduleList(_) => 167,
Self::SASchedules(_) => 171,
Self::SalesTariffEntry(_) => 176,
Self::ServiceDetailReq(_) => 185,
Self::ServiceDetailRes(_) => 186,
Self::ServiceDiscoveryReq(_) => 187,
Self::ServiceDiscoveryRes(_) => 188,
Self::SessionSetupReq(_) => 198,
Self::SessionSetupRes(_) => 199,
Self::SessionStopReq(_) => 200,
Self::SessionStopRes(_) => 201,
Self::Signature(_) => 203,
Self::SignatureMethod(_) => 204,
Self::SignatureValue(_) => 207,
Self::SignedInfo(_) => 208,
Self::TimeInterval(_) => 212,
Self::Transform(_) => 213,
Self::Transforms(_) => 214,
Self::V2GMessage(_) => 216,
Self::WeldingDetectionReq(_) => 218,
Self::WeldingDetectionRes(_) => 219,
}
}
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::ACEVChargeParameter(m) => m.encode_body(&mut e)?,
Self::ACEVSEChargeParameter(m) => m.encode_body(&mut e)?,
Self::ACEVSEStatus(m) => m.encode_body(&mut e)?,
Self::AuthorizationReq(m) => m.encode_body(&mut e)?,
Self::AuthorizationRes(m) => m.encode_body(&mut e)?,
Self::BodyElement(m) => m.encode_body(&mut e)?,
Self::CableCheckReq(m) => m.encode_body(&mut e)?,
Self::CableCheckRes(m) => m.encode_body(&mut e)?,
Self::CanonicalizationMethod(m) => m.encode_body(&mut e)?,
Self::CertificateInstallationReq(m) => m.encode_body(&mut e)?,
Self::CertificateInstallationRes(m) => m.encode_body(&mut e)?,
Self::CertificateUpdateReq(m) => m.encode_body(&mut e)?,
Self::CertificateUpdateRes(m) => m.encode_body(&mut e)?,
Self::ChargeParameterDiscoveryReq(m) => m.encode_body(&mut e)?,
Self::ChargeParameterDiscoveryRes(m) => m.encode_body(&mut e)?,
Self::ChargingStatusReq(m) => m.encode_body(&mut e)?,
Self::ChargingStatusRes(m) => m.encode_body(&mut e)?,
Self::CurrentDemandReq(m) => m.encode_body(&mut e)?,
Self::CurrentDemandRes(m) => m.encode_body(&mut e)?,
Self::DCEVChargeParameter(m) => m.encode_body(&mut e)?,
Self::DCEVPowerDeliveryParameter(m) => m.encode_body(&mut e)?,
Self::DCEVSEChargeParameter(m) => m.encode_body(&mut e)?,
Self::DCEVSEStatus(m) => m.encode_body(&mut e)?,
Self::DCEVStatus(m) => m.encode_body(&mut e)?,
Self::DigestMethod(m) => m.encode_body(&mut e)?,
Self::EVChargeParameter(m) => m.encode_body(&mut e)?,
Self::EVPowerDeliveryParameter(m) => m.encode_body(&mut e)?,
Self::EVSEChargeParameter(m) => m.encode_body(&mut e)?,
Self::EVSEStatus(m) => m.encode_body(&mut e)?,
Self::EVStatus(m) => m.encode_body(&mut e)?,
Self::Entry(m) => m.encode_body(&mut e)?,
Self::Manifest(m) => m.encode_body(&mut e)?,
Self::MeteringReceiptReq(m) => m.encode_body(&mut e)?,
Self::MeteringReceiptRes(m) => m.encode_body(&mut e)?,
Self::PMaxScheduleEntry(m) => m.encode_body(&mut e)?,
Self::PaymentDetailsReq(m) => m.encode_body(&mut e)?,
Self::PaymentDetailsRes(m) => m.encode_body(&mut e)?,
Self::PaymentServiceSelectionReq(m) => m.encode_body(&mut e)?,
Self::PaymentServiceSelectionRes(m) => m.encode_body(&mut e)?,
Self::PowerDeliveryReq(m) => m.encode_body(&mut e)?,
Self::PowerDeliveryRes(m) => m.encode_body(&mut e)?,
Self::PreChargeReq(m) => m.encode_body(&mut e)?,
Self::PreChargeRes(m) => m.encode_body(&mut e)?,
Self::RSAKeyValue(m) => m.encode_body(&mut e)?,
Self::Reference(m) => m.encode_body(&mut e)?,
Self::RelativeTimeInterval(m) => m.encode_body(&mut e)?,
Self::RetrievalMethod(m) => m.encode_body(&mut e)?,
Self::SAScheduleList(m) => m.encode_body(&mut e)?,
Self::SASchedules(m) => m.encode_body(&mut e)?,
Self::SalesTariffEntry(m) => m.encode_body(&mut e)?,
Self::ServiceDetailReq(m) => m.encode_body(&mut e)?,
Self::ServiceDetailRes(m) => m.encode_body(&mut e)?,
Self::ServiceDiscoveryReq(m) => m.encode_body(&mut e)?,
Self::ServiceDiscoveryRes(m) => m.encode_body(&mut e)?,
Self::SessionSetupReq(m) => m.encode_body(&mut e)?,
Self::SessionSetupRes(m) => m.encode_body(&mut e)?,
Self::SessionStopReq(m) => m.encode_body(&mut e)?,
Self::SessionStopRes(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::TimeInterval(m) => m.encode_body(&mut e)?,
Self::Transform(m) => m.encode_body(&mut e)?,
Self::Transforms(m) => m.encode_body(&mut e)?,
Self::V2GMessage(m) => m.encode_body(&mut e)?,
Self::WeldingDetectionReq(m) => m.encode_body(&mut e)?,
Self::WeldingDetectionRes(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)? {
0 => Self::ACEVChargeParameter(ACEVChargeParameter::decode_body(&mut d)?),
1 => Self::ACEVSEChargeParameter(ACEVSEChargeParameter::decode_body(&mut d)?),
3 => Self::ACEVSEStatus(ACEVSEStatus::decode_body(&mut d)?),
4 => Self::AuthorizationReq(AuthorizationReq::decode_body(&mut d)?),
5 => Self::AuthorizationRes(AuthorizationRes::decode_body(&mut d)?),
7 => Self::BodyElement(BodyBase::decode_body(&mut d)?),
11 => Self::CableCheckReq(CableCheckReq::decode_body(&mut d)?),
12 => Self::CableCheckRes(CableCheckRes::decode_body(&mut d)?),
13 => Self::CanonicalizationMethod(CanonicalizationMethod::decode_body(&mut d)?),
15 => {
Self::CertificateInstallationReq(CertificateInstallationReq::decode_body(&mut d)?)
}
16 => {
Self::CertificateInstallationRes(CertificateInstallationRes::decode_body(&mut d)?)
}
17 => Self::CertificateUpdateReq(CertificateUpdateReq::decode_body(&mut d)?),
18 => Self::CertificateUpdateRes(CertificateUpdateRes::decode_body(&mut d)?),
19 => {
Self::ChargeParameterDiscoveryReq(ChargeParameterDiscoveryReq::decode_body(&mut d)?)
}
20 => {
Self::ChargeParameterDiscoveryRes(ChargeParameterDiscoveryRes::decode_body(&mut d)?)
}
30 => Self::ChargingStatusReq(ChargingStatusReq::decode_body(&mut d)?),
31 => Self::ChargingStatusRes(ChargingStatusRes::decode_body(&mut d)?),
36 => Self::CurrentDemandReq(CurrentDemandReq::decode_body(&mut d)?),
37 => Self::CurrentDemandRes(CurrentDemandRes::decode_body(&mut d)?),
38 => Self::DCEVChargeParameter(DCEVChargeParameter::decode_body(&mut d)?),
39 => {
Self::DCEVPowerDeliveryParameter(DCEVPowerDeliveryParameter::decode_body(&mut d)?)
}
40 => Self::DCEVSEChargeParameter(DCEVSEChargeParameter::decode_body(&mut d)?),
42 => Self::DCEVSEStatus(DCEVSEStatus::decode_body(&mut d)?),
44 => Self::DCEVStatus(DCEVStatus::decode_body(&mut d)?),
48 => Self::DigestMethod(DigestMethod::decode_body(&mut d)?),
53 => Self::EVChargeParameter(EVChargeParameter::decode_body(&mut d)?),
66 => Self::EVPowerDeliveryParameter(EVPowerDeliveryParameter::decode_body(&mut d)?),
69 => Self::EVSEChargeParameter(EVSEChargeParameter::decode_body(&mut d)?),
92 => Self::EVSEStatus(EVSEStatus::decode_body(&mut d)?),
96 => Self::EVStatus(EVStatus::decode_body(&mut d)?),
100 => Self::Entry(Entry::decode_body(&mut d)?),
115 => Self::Manifest(Manifest::decode_body(&mut d)?),
121 => Self::MeteringReceiptReq(MeteringReceiptReq::decode_body(&mut d)?),
122 => Self::MeteringReceiptRes(MeteringReceiptRes::decode_body(&mut d)?),
137 => Self::PMaxScheduleEntry(PMaxScheduleEntry::decode_body(&mut d)?),
141 => Self::PaymentDetailsReq(PaymentDetailsReq::decode_body(&mut d)?),
142 => Self::PaymentDetailsRes(PaymentDetailsRes::decode_body(&mut d)?),
145 => {
Self::PaymentServiceSelectionReq(PaymentServiceSelectionReq::decode_body(&mut d)?)
}
146 => {
Self::PaymentServiceSelectionRes(PaymentServiceSelectionRes::decode_body(&mut d)?)
}
148 => Self::PowerDeliveryReq(PowerDeliveryReq::decode_body(&mut d)?),
149 => Self::PowerDeliveryRes(PowerDeliveryRes::decode_body(&mut d)?),
150 => Self::PreChargeReq(PreChargeReq::decode_body(&mut d)?),
151 => Self::PreChargeRes(PreChargeRes::decode_body(&mut d)?),
155 => Self::RSAKeyValue(RSAKeyValue::decode_body(&mut d)?),
157 => Self::Reference(Reference::decode_body(&mut d)?),
158 => Self::RelativeTimeInterval(RelativeTimeInterval::decode_body(&mut d)?),
163 => Self::RetrievalMethod(RetrievalMethod::decode_body(&mut d)?),
167 => Self::SAScheduleList(SAScheduleList::decode_body(&mut d)?),
171 => Self::SASchedules(SASchedules::decode_body(&mut d)?),
176 => Self::SalesTariffEntry(SalesTariffEntry::decode_body(&mut d)?),
185 => Self::ServiceDetailReq(ServiceDetailReq::decode_body(&mut d)?),
186 => Self::ServiceDetailRes(ServiceDetailRes::decode_body(&mut d)?),
187 => Self::ServiceDiscoveryReq(ServiceDiscoveryReq::decode_body(&mut d)?),
188 => Self::ServiceDiscoveryRes(ServiceDiscoveryRes::decode_body(&mut d)?),
198 => Self::SessionSetupReq(SessionSetupReq::decode_body(&mut d)?),
199 => Self::SessionSetupRes(SessionSetupRes::decode_body(&mut d)?),
200 => Self::SessionStopReq(SessionStopReq::decode_body(&mut d)?),
201 => Self::SessionStopRes(SessionStopRes::decode_body(&mut d)?),
203 => Self::Signature(Signature::decode_body(&mut d)?),
204 => Self::SignatureMethod(SignatureMethod::decode_body(&mut d)?),
207 => Self::SignatureValue(SignatureValue::decode_body(&mut d)?),
208 => Self::SignedInfo(SignedInfo::decode_body(&mut d)?),
212 => Self::TimeInterval(Interval::decode_body(&mut d)?),
213 => Self::Transform(Transform::decode_body(&mut d)?),
214 => Self::Transforms(Transforms::decode_body(&mut d)?),
216 => Self::V2GMessage(V2GMessage::decode_body(&mut d)?),
218 => Self::WeldingDetectionReq(WeldingDetectionReq::decode_body(&mut d)?),
219 => Self::WeldingDetectionRes(WeldingDetectionRes::decode_body(&mut d)?),
_ => return Err(ExiError::UnknownEventCode),
};
d.expect_event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
d.finish()?;
Ok(value)
}
}
impl ACEVChargeParameter {
pub const FRAGMENT_CODE: u64 = 0;
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 ACEVSEChargeParameter {
pub const FRAGMENT_CODE: u64 = 1;
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 AuthorizationReq {
pub const FRAGMENT_CODE: u64 = 4;
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 AuthorizationRes {
pub const FRAGMENT_CODE: u64 = 5;
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 Body {
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 BodyBase {
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 CableCheckReq {
pub const FRAGMENT_CODE: u64 = 11;
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 CableCheckRes {
pub const FRAGMENT_CODE: u64 = 12;
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 = 13;
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 CertificateInstallationReq {
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 CertificateInstallationRes {
pub const FRAGMENT_CODE: u64 = 16;
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 CertificateUpdateReq {
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 CertificateUpdateRes {
pub const FRAGMENT_CODE: u64 = 18;
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 ChargeParameterDiscoveryReq {
pub const FRAGMENT_CODE: u64 = 19;
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 ChargeParameterDiscoveryRes {
pub const FRAGMENT_CODE: u64 = 20;
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 ChargeService {
pub const FRAGMENT_CODE: u64 = 22;
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 ChargingProfile {
pub const FRAGMENT_CODE: u64 = 25;
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 ChargingStatusReq {
pub const FRAGMENT_CODE: u64 = 30;
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 ChargingStatusRes {
pub const FRAGMENT_CODE: u64 = 31;
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 ConsumptionCost {
pub const FRAGMENT_CODE: u64 = 32;
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 ContractSignatureEncryptedPrivateKey {
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 Cost {
pub const FRAGMENT_CODE: u64 = 35;
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 CurrentDemandReq {
pub const FRAGMENT_CODE: u64 = 36;
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 CurrentDemandRes {
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 DCEVChargeParameter {
pub const FRAGMENT_CODE: u64 = 38;
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 DCEVPowerDeliveryParameter {
pub const FRAGMENT_CODE: u64 = 39;
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 DCEVSEChargeParameter {
pub const FRAGMENT_CODE: u64 = 40;
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 DiffieHellmanPublickey {
pub const FRAGMENT_CODE: u64 = 45;
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 FRAGMENT_CODE: u64 = 48;
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 EVChargeParameter {
pub const FRAGMENT_CODE: u64 = 53;
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 EVPowerDeliveryParameter {
pub const FRAGMENT_CODE: u64 = 66;
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 EVSEChargeParameter {
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 EVSEStatus {
pub const FRAGMENT_CODE: u64 = 92;
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 EVStatus {
pub const FRAGMENT_CODE: u64 = 96;
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 Entry {
pub const FRAGMENT_CODE: u64 = 100;
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 = 109;
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 ListOfRootCertificateIDs {
pub const FRAGMENT_CODE: u64 = 114;
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 = 115;
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 = 118;
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 MeteringReceiptReq {
pub const FRAGMENT_CODE: u64 = 121;
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 MeteringReceiptRes {
pub const FRAGMENT_CODE: u64 = 122;
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 Notification {
pub const FRAGMENT_CODE: u64 = 126;
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 PMaxSchedule {
pub const FRAGMENT_CODE: u64 = 136;
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 PMaxScheduleEntry {
pub const FRAGMENT_CODE: u64 = 137;
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 Parameter {
pub const FRAGMENT_CODE: u64 = 138;
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 ParameterSet {
pub const FRAGMENT_CODE: u64 = 139;
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 PaymentDetailsReq {
pub const FRAGMENT_CODE: u64 = 141;
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 PaymentDetailsRes {
pub const FRAGMENT_CODE: u64 = 142;
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 PaymentOptionList {
pub const FRAGMENT_CODE: u64 = 144;
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 PaymentServiceSelectionReq {
pub const FRAGMENT_CODE: u64 = 145;
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 PaymentServiceSelectionRes {
pub const FRAGMENT_CODE: u64 = 146;
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 PowerDeliveryReq {
pub const FRAGMENT_CODE: u64 = 148;
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 PowerDeliveryRes {
pub const FRAGMENT_CODE: u64 = 149;
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 PreChargeReq {
pub const FRAGMENT_CODE: u64 = 150;
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 PreChargeRes {
pub const FRAGMENT_CODE: u64 = 151;
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 ProfileEntry {
pub const FRAGMENT_CODE: u64 = 152;
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 = 155;
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 Reference {
pub const FRAGMENT_CODE: u64 = 157;
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 RelativeTimeInterval {
pub const FRAGMENT_CODE: u64 = 158;
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 FRAGMENT_CODE: u64 = 163;
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 SAScheduleList {
pub const FRAGMENT_CODE: u64 = 167;
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 SAScheduleTuple {
pub const FRAGMENT_CODE: u64 = 168;
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 SASchedules {
pub const FRAGMENT_CODE: u64 = 171;
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 SalesTariff {
pub const FRAGMENT_CODE: u64 = 174;
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 SalesTariffEntry {
pub const FRAGMENT_CODE: u64 = 176;
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 SelectedService {
pub const FRAGMENT_CODE: u64 = 180;
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 SelectedServiceList {
pub const FRAGMENT_CODE: u64 = 181;
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 Service {
pub const FRAGMENT_CODE: u64 = 182;
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 ServiceDetailReq {
pub const FRAGMENT_CODE: u64 = 185;
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 ServiceDetailRes {
pub const FRAGMENT_CODE: u64 = 186;
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 ServiceDiscoveryReq {
pub const FRAGMENT_CODE: u64 = 187;
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 ServiceDiscoveryRes {
pub const FRAGMENT_CODE: u64 = 188;
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 ServiceList {
pub const FRAGMENT_CODE: u64 = 191;
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 ServiceParameterList {
pub const FRAGMENT_CODE: u64 = 193;
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 SessionSetupReq {
pub const FRAGMENT_CODE: u64 = 198;
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 SessionSetupRes {
pub const FRAGMENT_CODE: u64 = 199;
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 SessionStopReq {
pub const FRAGMENT_CODE: u64 = 200;
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 SessionStopRes {
pub const FRAGMENT_CODE: u64 = 201;
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 FRAGMENT_CODE: u64 = 203;
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 = 204;
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 = 207;
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 = 208;
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 SubCertificates {
pub const FRAGMENT_CODE: u64 = 209;
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 SupportedEnergyTransferMode {
pub const FRAGMENT_CODE: u64 = 210;
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 Interval {
pub const FRAGMENT_CODE: u64 = 212;
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 = 213;
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 = 214;
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)
}
}
impl V2GMessage {
pub const FRAGMENT_CODE: u64 = 216;
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 WeldingDetectionReq {
pub const FRAGMENT_CODE: u64 = 218;
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 WeldingDetectionRes {
pub const FRAGMENT_CODE: u64 = 219;
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)
}
}