#![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_CommonMessages";
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct AbsolutePriceSchedule {
pub id: Option<String>,
pub time_anchor: u64,
pub price_schedule_id: u32,
pub price_schedule_description: Option<String>,
pub currency: String,
pub language: String,
pub price_algorithm: String,
pub minimum_cost: Option<super::common::RationalNumber>,
pub maximum_cost: Option<super::common::RationalNumber>,
pub tax_rules: Option<TaxRuleList>,
pub price_rule_stacks: PriceRuleStackList,
pub overstay_rules: Option<OverstayRuleList>,
pub additional_selected_services: Option<AdditionalServiceList>,
}
impl AbsolutePriceSchedule {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13],
width: &[2, 1, 1, 2, 1, 1, 1, 3, 2, 2, 1, 2, 2, 1],
repeat_width: &[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
min: &[0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0],
max: &[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
};
}
impl AbsolutePriceSchedule {
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(92), item, Lengths::max(65536))?;
w.finish(0, 1);
}
{
let item = &self.time_anchor;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.uint(u64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
{
let item = &self.price_schedule_id;
w.start(e, 2, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.uint(u64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(2, 1);
}
if let Some(item) = &self.price_schedule_description {
w.start(e, 3, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.string(ValueCtx(153), item, Lengths::max(160))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(3, 1);
}
{
let item = &self.currency;
w.start(e, 4, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.string(ValueCtx(31), item, Lengths::max(3))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(4, 1);
}
{
let item = &self.language;
w.start(e, 5, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.string(ValueCtx(95), item, Lengths::max(3))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(5, 1);
}
{
let item = &self.price_algorithm;
w.start(e, 6, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.string(ValueCtx(145), item, Lengths::max(255))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(6, 1);
}
if let Some(item) = &self.minimum_cost {
w.start(e, 7, 0)?;
item.encode_body(e)?;
w.finish(7, 1);
}
if let Some(item) = &self.maximum_cost {
w.start(e, 8, 0)?;
item.encode_body(e)?;
w.finish(8, 1);
}
if let Some(item) = &self.tax_rules {
w.start(e, 9, 0)?;
item.encode_body(e)?;
w.finish(9, 1);
}
{
let item = &self.price_rule_stacks;
w.start(e, 10, 0)?;
item.encode_body(e)?;
w.finish(10, 1);
}
if let Some(item) = &self.overstay_rules {
w.start(e, 11, 0)?;
item.encode_body(e)?;
w.finish(11, 1);
}
if let Some(item) = &self.additional_selected_services {
w.start(e, 12, 0)?;
item.encode_body(e)?;
w.finish(12, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl AbsolutePriceSchedule {
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;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
let value = d.string(ValueCtx(92), Lengths::max(65536))?;
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 = u32::try_from(d.uint()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_2 = Some(value);
}
Step::Item { index: 3, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.string(ValueCtx(153), Lengths::max(160))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_3 = Some(value);
}
Step::Item { index: 4, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.string(ValueCtx(31), Lengths::max(3))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_4 = Some(value);
}
Step::Item { index: 5, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.string(ValueCtx(95), Lengths::max(3))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_5 = Some(value);
}
Step::Item { index: 6, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.string(ValueCtx(145), Lengths::max(255))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_6 = Some(value);
}
Step::Item { index: 7, .. } => {
let value = super::common::RationalNumber::decode_body(d)?;
f_7 = Some(value);
}
Step::Item { index: 8, .. } => {
let value = super::common::RationalNumber::decode_body(d)?;
f_8 = Some(value);
}
Step::Item { index: 9, .. } => {
let value = TaxRuleList::decode_body(d)?;
f_9 = Some(value);
}
Step::Item { index: 10, .. } => {
let value = PriceRuleStackList::decode_body(d)?;
f_10 = Some(value);
}
Step::Item { index: 11, .. } => {
let value = OverstayRuleList::decode_body(d)?;
f_11 = Some(value);
}
Step::Item { index: 12, .. } => {
let value = AdditionalServiceList::decode_body(d)?;
f_12 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
id: f_0,
time_anchor: f_1.ok_or(ExiError::MissingElement)?,
price_schedule_id: f_2.ok_or(ExiError::MissingElement)?,
price_schedule_description: f_3,
currency: f_4.ok_or(ExiError::MissingElement)?,
language: f_5.ok_or(ExiError::MissingElement)?,
price_algorithm: f_6.ok_or(ExiError::MissingElement)?,
minimum_cost: f_7,
maximum_cost: f_8,
tax_rules: f_9,
price_rule_stacks: f_10.ok_or(ExiError::MissingElement)?,
overstay_rules: f_11,
additional_selected_services: f_12,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct AdditionalServiceList {
pub additional_service: Vec<AdditionalService>,
}
impl AdditionalServiceList {
const SHAPE: Shape =
Shape { prod_before: &[0, 1], width: &[1, 1], repeat_width: &[2], min: &[1], max: &[5] };
}
impl AdditionalServiceList {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let items = &self.additional_service;
let count = items.len() as u32;
if count < 1 || count > 5 {
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 AdditionalServiceList {
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 = AdditionalService::decode_body(d)?;
f_0.push(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
additional_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 AdditionalService {
pub service_name: String,
pub service_fee: super::common::RationalNumber,
}
impl AdditionalService {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 1, 1],
repeat_width: &[0, 0],
min: &[1, 1],
max: &[1, 1],
};
}
impl AdditionalService {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.service_name;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.string(ValueCtx(182), item, Lengths::max(80))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
{
let item = &self.service_fee;
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl AdditionalService {
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(182), Lengths::max(80))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = super::common::RationalNumber::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
service_name: f_0.ok_or(ExiError::MissingElement)?,
service_fee: f_1.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum AuthorizationReqChoice {
EIMAReqAuthorizationMode(EIMAReqAuthorizationMode),
PnCAReqAuthorizationMode(PnCAReqAuthorizationMode),
}
impl AuthorizationReqChoice {
#[must_use]
pub const fn name(&self) -> &'static str {
match self {
Self::EIMAReqAuthorizationMode(_) => "EIM_AReqAuthorizationMode",
Self::PnCAReqAuthorizationMode(_) => "PnC_AReqAuthorizationMode",
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct AuthorizationReq {
pub header: super::common::MessageHeader,
pub selected_authorization_service: Authorization,
pub choice: AuthorizationReqChoice,
}
impl AuthorizationReq {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 4],
width: &[1, 1, 2, 1],
repeat_width: &[0, 0, 0],
min: &[1, 1, 1],
max: &[1, 1, 1],
};
}
impl AuthorizationReq {
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.selected_authorization_service;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), Authorization::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
{
let item = &self.choice;
match item {
AuthorizationReqChoice::EIMAReqAuthorizationMode(value) => {
w.start_branch(e, 2, 0, 0)?;
value.encode_body(e)?;
}
AuthorizationReqChoice::PnCAReqAuthorizationMode(value) => {
w.start_branch(e, 2, 0, 1)?;
value.encode_body(e)?;
}
}
w.finish(2, 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;
let mut f_2 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
let value = super::common::MessageHeader::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = Authorization::from_index(d.nbit(Authorization::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { index: 2, branch, .. } => {
let value = match branch {
0 => {
let value = EIMAReqAuthorizationMode::decode_body(d)?;
AuthorizationReqChoice::EIMAReqAuthorizationMode(value)
}
1 => {
let value = PnCAReqAuthorizationMode::decode_body(d)?;
AuthorizationReqChoice::PnCAReqAuthorizationMode(value)
}
_ => return Err(ExiError::UnknownEventCode),
};
f_2 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
header: f_0.ok_or(ExiError::MissingElement)?,
selected_authorization_service: 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 struct AuthorizationRes {
pub header: super::common::MessageHeader,
pub response_code: super::common::ResponseCode,
pub evse_processing: super::common::Processing,
}
impl AuthorizationRes {
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 AuthorizationRes {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.header;
w.start(e, 0, 0)?;
item.encode_body(e)?;
w.finish(0, 1);
}
{
let item = &self.response_code;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), super::common::ResponseCode::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
{
let item = &self.evse_processing;
w.start(e, 2, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), super::common::Processing::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(2, 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;
let mut f_2 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
let value = super::common::MessageHeader::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = super::common::ResponseCode::from_index(
d.nbit(super::common::ResponseCode::WIDTH)?,
)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = super::common::Processing::from_index(
d.nbit(super::common::Processing::WIDTH)?,
)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_2 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
header: f_0.ok_or(ExiError::MissingElement)?,
response_code: 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 AuthorizationSetupReq {
pub header: super::common::MessageHeader,
}
impl AuthorizationSetupReq {
const SHAPE: Shape =
Shape { prod_before: &[0, 1], width: &[1, 1], repeat_width: &[0], min: &[1], max: &[1] };
}
impl AuthorizationSetupReq {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.header;
w.start(e, 0, 0)?;
item.encode_body(e)?;
w.finish(0, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl AuthorizationSetupReq {
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 = super::common::MessageHeader::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self { header: f_0.ok_or(ExiError::MissingElement)? })
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum AuthorizationSetupResChoice {
EIMASResAuthorizationMode(EIMASResAuthorizationMode),
PnCASResAuthorizationMode(PnCASResAuthorizationMode),
}
impl AuthorizationSetupResChoice {
#[must_use]
pub const fn name(&self) -> &'static str {
match self {
Self::EIMASResAuthorizationMode(_) => "EIM_ASResAuthorizationMode",
Self::PnCASResAuthorizationMode(_) => "PnC_ASResAuthorizationMode",
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct AuthorizationSetupRes {
pub header: super::common::MessageHeader,
pub response_code: super::common::ResponseCode,
pub authorization_services: Vec<Authorization>,
pub certificate_installation_service: bool,
pub choice: AuthorizationSetupResChoice,
}
impl AuthorizationSetupRes {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4, 6],
width: &[1, 1, 1, 1, 2, 1],
repeat_width: &[0, 0, 2, 0, 0],
min: &[1, 1, 1, 1, 1],
max: &[1, 1, 2, 1, 1],
};
}
impl AuthorizationSetupRes {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.header;
w.start(e, 0, 0)?;
item.encode_body(e)?;
w.finish(0, 1);
}
{
let item = &self.response_code;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), super::common::ResponseCode::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
{
let items = &self.authorization_services;
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, 2, c as u32)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), Authorization::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; }
if count > 0 {
w.finish(2, count);
}
}
{
let item = &self.certificate_installation_service;
w.start(e, 3, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.boolean(*item)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(3, 1);
}
{
let item = &self.choice;
match item {
AuthorizationSetupResChoice::EIMASResAuthorizationMode(value) => {
w.start_branch(e, 4, 0, 0)?;
value.encode_body(e)?;
}
AuthorizationSetupResChoice::PnCASResAuthorizationMode(value) => {
w.start_branch(e, 4, 0, 1)?;
value.encode_body(e)?;
}
}
w.finish(4, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl AuthorizationSetupRes {
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();
let mut f_3 = None;
let mut f_4 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
let value = super::common::MessageHeader::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = super::common::ResponseCode::from_index(
d.nbit(super::common::ResponseCode::WIDTH)?,
)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = Authorization::from_index(d.nbit(Authorization::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_2.push(value);
}
Step::Item { index: 3, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.boolean()?;
d.expect_event(0, SIMPLE_WIDTH)?; f_3 = Some(value);
}
Step::Item { index: 4, branch, .. } => {
let value = match branch {
0 => {
let value = EIMASResAuthorizationMode::decode_body(d)?;
AuthorizationSetupResChoice::EIMASResAuthorizationMode(value)
}
1 => {
let value = PnCASResAuthorizationMode::decode_body(d)?;
AuthorizationSetupResChoice::PnCASResAuthorizationMode(value)
}
_ => return Err(ExiError::UnknownEventCode),
};
f_4 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
header: f_0.ok_or(ExiError::MissingElement)?,
response_code: f_1.ok_or(ExiError::MissingElement)?,
authorization_services: {
if (f_2.len() as u32) < 1 {
return Err(ExiError::MissingElement);
}
f_2
},
certificate_installation_service: f_3.ok_or(ExiError::MissingElement)?,
choice: f_4.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct CertificateChain {
pub certificate: Vec<u8>,
pub sub_certificates: Option<SubCertificates>,
}
impl CertificateChain {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 2, 1],
repeat_width: &[0, 0],
min: &[1, 0],
max: &[1, 1],
};
}
impl CertificateChain {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.certificate;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.binary(item, Lengths::max(1600))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
if let Some(item) = &self.sub_certificates {
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 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;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.binary(Lengths::max(1600))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = SubCertificates::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self { certificate: f_0.ok_or(ExiError::MissingElement)?, sub_certificates: f_1 })
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct CertificateInstallationReq {
pub header: super::common::MessageHeader,
pub oem_provisioning_certificate_chain: SignedCertificateChain,
pub list_of_root_certificate_i_ds: super::common::ListOfRootCertificateIDs,
pub maximum_contract_certificate_chains: u8,
pub prioritized_emai_ds: Option<EMAIDList>,
}
impl CertificateInstallationReq {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4, 5],
width: &[1, 1, 1, 1, 2, 1],
repeat_width: &[0, 0, 0, 0, 0],
min: &[1, 1, 1, 1, 0],
max: &[1, 1, 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.header;
w.start(e, 0, 0)?;
item.encode_body(e)?;
w.finish(0, 1);
}
{
let item = &self.oem_provisioning_certificate_chain;
w.start(e, 1, 0)?;
item.encode_body(e)?;
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);
}
{
let item = &self.maximum_contract_certificate_chains;
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);
}
if let Some(item) = &self.prioritized_emai_ds {
w.start(e, 4, 0)?;
item.encode_body(e)?;
w.finish(4, 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;
let mut f_3 = None;
let mut f_4 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
let value = super::common::MessageHeader::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = SignedCertificateChain::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
let value = super::common::ListOfRootCertificateIDs::decode_body(d)?;
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 = EMAIDList::decode_body(d)?;
f_4 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
header: f_0.ok_or(ExiError::MissingElement)?,
oem_provisioning_certificate_chain: f_1.ok_or(ExiError::MissingElement)?,
list_of_root_certificate_i_ds: f_2.ok_or(ExiError::MissingElement)?,
maximum_contract_certificate_chains: f_3.ok_or(ExiError::MissingElement)?,
prioritized_emai_ds: f_4,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct CertificateInstallationRes {
pub header: super::common::MessageHeader,
pub response_code: super::common::ResponseCode,
pub evse_processing: super::common::Processing,
pub cp_s_certificate_chain: CertificateChain,
pub signed_installation_data: SignedInstallationData,
pub remaining_contract_certificate_chains: u8,
}
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.header;
w.start(e, 0, 0)?;
item.encode_body(e)?;
w.finish(0, 1);
}
{
let item = &self.response_code;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), super::common::ResponseCode::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
{
let item = &self.evse_processing;
w.start(e, 2, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), super::common::Processing::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(2, 1);
}
{
let item = &self.cp_s_certificate_chain;
w.start(e, 3, 0)?;
item.encode_body(e)?;
w.finish(3, 1);
}
{
let item = &self.signed_installation_data;
w.start(e, 4, 0)?;
item.encode_body(e)?;
w.finish(4, 1);
}
{
let item = &self.remaining_contract_certificate_chains;
w.start(e, 5, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.restricted(i64::from(*item), 0, 255)?;
e.event(0, SIMPLE_WIDTH)?; 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, .. } => {
let value = super::common::MessageHeader::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = super::common::ResponseCode::from_index(
d.nbit(super::common::ResponseCode::WIDTH)?,
)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = super::common::Processing::from_index(
d.nbit(super::common::Processing::WIDTH)?,
)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_2 = Some(value);
}
Step::Item { index: 3, .. } => {
let value = CertificateChain::decode_body(d)?;
f_3 = Some(value);
}
Step::Item { index: 4, .. } => {
let value = SignedInstallationData::decode_body(d)?;
f_4 = Some(value);
}
Step::Item { index: 5, .. } => {
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_5 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
header: f_0.ok_or(ExiError::MissingElement)?,
response_code: f_1.ok_or(ExiError::MissingElement)?,
evse_processing: f_2.ok_or(ExiError::MissingElement)?,
cp_s_certificate_chain: f_3.ok_or(ExiError::MissingElement)?,
signed_installation_data: f_4.ok_or(ExiError::MissingElement)?,
remaining_contract_certificate_chains: f_5.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum ChargingScheduleChoice {
AbsolutePriceSchedule(AbsolutePriceSchedule),
PriceLevelSchedule(PriceLevelSchedule),
}
impl ChargingScheduleChoice {
#[must_use]
pub const fn name(&self) -> &'static str {
match self {
Self::AbsolutePriceSchedule(_) => "AbsolutePriceSchedule",
Self::PriceLevelSchedule(_) => "PriceLevelSchedule",
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ChargingSchedule {
pub power_schedule: PowerSchedule,
pub choice: Option<ChargingScheduleChoice>,
}
impl ChargingSchedule {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 3],
width: &[1, 2, 1],
repeat_width: &[0, 0],
min: &[1, 0],
max: &[1, 1],
};
}
impl ChargingSchedule {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.power_schedule;
w.start(e, 0, 0)?;
item.encode_body(e)?;
w.finish(0, 1);
}
if let Some(item) = &self.choice {
match item {
ChargingScheduleChoice::AbsolutePriceSchedule(value) => {
w.start_branch(e, 1, 0, 0)?;
value.encode_body(e)?;
}
ChargingScheduleChoice::PriceLevelSchedule(value) => {
w.start_branch(e, 1, 0, 1)?;
value.encode_body(e)?;
}
}
w.finish(1, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl ChargingSchedule {
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 = PowerSchedule::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { index: 1, branch, .. } => {
let value = match branch {
0 => {
let value = AbsolutePriceSchedule::decode_body(d)?;
ChargingScheduleChoice::AbsolutePriceSchedule(value)
}
1 => {
let value = PriceLevelSchedule::decode_body(d)?;
ChargingScheduleChoice::PriceLevelSchedule(value)
}
_ => return Err(ExiError::UnknownEventCode),
};
f_1 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self { power_schedule: f_0.ok_or(ExiError::MissingElement)?, choice: f_1 })
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ContractCertificateChain {
pub certificate: Vec<u8>,
pub sub_certificates: SubCertificates,
}
impl ContractCertificateChain {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 1, 1],
repeat_width: &[0, 0],
min: &[1, 1],
max: &[1, 1],
};
}
impl ContractCertificateChain {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.certificate;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.binary(item, Lengths::max(1600))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
{
let item = &self.sub_certificates;
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl ContractCertificateChain {
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(1600))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = SubCertificates::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
certificate: f_0.ok_or(ExiError::MissingElement)?,
sub_certificates: f_1.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct DynamicEVPPTControlMode;
impl DynamicEVPPTControlMode {
const SHAPE: Shape =
Shape { prod_before: &[0], width: &[1], repeat_width: &[], min: &[], max: &[] };
}
impl DynamicEVPPTControlMode {
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 DynamicEVPPTControlMode {
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 DynamicSEReqControlMode {
pub departure_time: u32,
pub minimum_soc: Option<u8>,
pub target_soc: Option<u8>,
pub ev_target_energy_request: super::common::RationalNumber,
pub ev_maximum_energy_request: super::common::RationalNumber,
pub ev_minimum_energy_request: super::common::RationalNumber,
pub ev_maximum_v2_x_energy_request: Option<super::common::RationalNumber>,
pub ev_minimum_v2_x_energy_request: Option<super::common::RationalNumber>,
}
impl DynamicSEReqControlMode {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4, 5, 6, 7, 8],
width: &[1, 2, 2, 1, 1, 1, 2, 2, 1],
repeat_width: &[0, 0, 0, 0, 0, 0, 0, 0],
min: &[1, 0, 0, 1, 1, 1, 0, 0],
max: &[1, 1, 1, 1, 1, 1, 1, 1],
};
}
impl DynamicSEReqControlMode {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.departure_time;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.uint(u64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
if let Some(item) = &self.minimum_soc {
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.restricted(i64::from(*item), 0, 100)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
if let Some(item) = &self.target_soc {
w.start(e, 2, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.restricted(i64::from(*item), 0, 100)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(2, 1);
}
{
let item = &self.ev_target_energy_request;
w.start(e, 3, 0)?;
item.encode_body(e)?;
w.finish(3, 1);
}
{
let item = &self.ev_maximum_energy_request;
w.start(e, 4, 0)?;
item.encode_body(e)?;
w.finish(4, 1);
}
{
let item = &self.ev_minimum_energy_request;
w.start(e, 5, 0)?;
item.encode_body(e)?;
w.finish(5, 1);
}
if let Some(item) = &self.ev_maximum_v2_x_energy_request {
w.start(e, 6, 0)?;
item.encode_body(e)?;
w.finish(6, 1);
}
if let Some(item) = &self.ev_minimum_v2_x_energy_request {
w.start(e, 7, 0)?;
item.encode_body(e)?;
w.finish(7, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl DynamicSEReqControlMode {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
let mut f_0 = None;
let mut f_1 = None;
let mut f_2 = None;
let mut f_3 = None;
let mut f_4 = None;
let mut f_5 = None;
let mut f_6 = None;
let mut f_7 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = u32::try_from(d.uint()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = u8::try_from(d.restricted(0, 100)?)
.map_err(|_| ExiError::ValueOutOfRange)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = u8::try_from(d.restricted(0, 100)?)
.map_err(|_| ExiError::ValueOutOfRange)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_2 = Some(value);
}
Step::Item { index: 3, .. } => {
let value = super::common::RationalNumber::decode_body(d)?;
f_3 = Some(value);
}
Step::Item { index: 4, .. } => {
let value = super::common::RationalNumber::decode_body(d)?;
f_4 = Some(value);
}
Step::Item { index: 5, .. } => {
let value = super::common::RationalNumber::decode_body(d)?;
f_5 = Some(value);
}
Step::Item { index: 6, .. } => {
let value = super::common::RationalNumber::decode_body(d)?;
f_6 = Some(value);
}
Step::Item { index: 7, .. } => {
let value = super::common::RationalNumber::decode_body(d)?;
f_7 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
departure_time: f_0.ok_or(ExiError::MissingElement)?,
minimum_soc: f_1,
target_soc: f_2,
ev_target_energy_request: f_3.ok_or(ExiError::MissingElement)?,
ev_maximum_energy_request: f_4.ok_or(ExiError::MissingElement)?,
ev_minimum_energy_request: f_5.ok_or(ExiError::MissingElement)?,
ev_maximum_v2_x_energy_request: f_6,
ev_minimum_v2_x_energy_request: f_7,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum DynamicSEResControlModeChoice {
AbsolutePriceSchedule(AbsolutePriceSchedule),
PriceLevelSchedule(PriceLevelSchedule),
}
impl DynamicSEResControlModeChoice {
#[must_use]
pub const fn name(&self) -> &'static str {
match self {
Self::AbsolutePriceSchedule(_) => "AbsolutePriceSchedule",
Self::PriceLevelSchedule(_) => "PriceLevelSchedule",
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct DynamicSEResControlMode {
pub departure_time: Option<u32>,
pub minimum_soc: Option<u8>,
pub target_soc: Option<u8>,
pub choice: Option<DynamicSEResControlModeChoice>,
}
impl DynamicSEResControlMode {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 5],
width: &[3, 3, 3, 2, 1],
repeat_width: &[0, 0, 0, 0],
min: &[0, 0, 0, 0],
max: &[1, 1, 1, 1],
};
}
impl DynamicSEResControlMode {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
if let Some(item) = &self.departure_time {
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.uint(u64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
if let Some(item) = &self.minimum_soc {
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.restricted(i64::from(*item), 0, 100)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
if let Some(item) = &self.target_soc {
w.start(e, 2, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.restricted(i64::from(*item), 0, 100)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(2, 1);
}
if let Some(item) = &self.choice {
match item {
DynamicSEResControlModeChoice::AbsolutePriceSchedule(value) => {
w.start_branch(e, 3, 0, 0)?;
value.encode_body(e)?;
}
DynamicSEResControlModeChoice::PriceLevelSchedule(value) => {
w.start_branch(e, 3, 0, 1)?;
value.encode_body(e)?;
}
}
w.finish(3, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl DynamicSEResControlMode {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
let mut f_0 = None;
let mut f_1 = None;
let mut f_2 = None;
let mut f_3 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = u32::try_from(d.uint()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = u8::try_from(d.restricted(0, 100)?)
.map_err(|_| ExiError::ValueOutOfRange)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = u8::try_from(d.restricted(0, 100)?)
.map_err(|_| ExiError::ValueOutOfRange)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_2 = Some(value);
}
Step::Item { index: 3, branch, .. } => {
let value = match branch {
0 => {
let value = AbsolutePriceSchedule::decode_body(d)?;
DynamicSEResControlModeChoice::AbsolutePriceSchedule(value)
}
1 => {
let value = PriceLevelSchedule::decode_body(d)?;
DynamicSEResControlModeChoice::PriceLevelSchedule(value)
}
_ => return Err(ExiError::UnknownEventCode),
};
f_3 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self { departure_time: f_0, minimum_soc: f_1, target_soc: f_2, choice: f_3 })
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct DynamicSMDTControlMode;
impl DynamicSMDTControlMode {
const SHAPE: Shape =
Shape { prod_before: &[0], width: &[1], repeat_width: &[], min: &[], max: &[] };
}
impl DynamicSMDTControlMode {
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 DynamicSMDTControlMode {
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 EIMAReqAuthorizationMode;
impl EIMAReqAuthorizationMode {
const SHAPE: Shape =
Shape { prod_before: &[0], width: &[1], repeat_width: &[], min: &[], max: &[] };
}
impl EIMAReqAuthorizationMode {
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 EIMAReqAuthorizationMode {
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 EIMASResAuthorizationMode;
impl EIMASResAuthorizationMode {
const SHAPE: Shape =
Shape { prod_before: &[0], width: &[1], repeat_width: &[], min: &[], max: &[] };
}
impl EIMASResAuthorizationMode {
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 EIMASResAuthorizationMode {
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 EMAIDList {
pub emaid: Vec<String>,
}
impl EMAIDList {
const SHAPE: Shape =
Shape { prod_before: &[0, 1], width: &[1, 1], repeat_width: &[2], min: &[1], max: &[8] };
}
impl EMAIDList {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let items = &self.emaid;
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)?;
e.event(0, SIMPLE_WIDTH)?; e.string(ValueCtx(49), item, Lengths::max(255))?;
e.event(0, SIMPLE_WIDTH)?; }
if count > 0 {
w.finish(0, count);
}
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl EMAIDList {
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.string(ValueCtx(49), Lengths::max(255))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0.push(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
emaid: {
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 EVAbsolutePriceSchedule {
pub time_anchor: u64,
pub currency: String,
pub price_algorithm: String,
pub ev_price_rule_stacks: EVPriceRuleStackList,
}
impl EVAbsolutePriceSchedule {
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 EVAbsolutePriceSchedule {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.time_anchor;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.uint(u64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
{
let item = &self.currency;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.string(ValueCtx(31), item, Lengths::max(3))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
{
let item = &self.price_algorithm;
w.start(e, 2, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.string(ValueCtx(145), item, Lengths::max(255))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(2, 1);
}
{
let item = &self.ev_price_rule_stacks;
w.start(e, 3, 0)?;
item.encode_body(e)?;
w.finish(3, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl EVAbsolutePriceSchedule {
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 = u64::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(31), Lengths::max(3))?;
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(145), Lengths::max(255))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_2 = Some(value);
}
Step::Item { index: 3, .. } => {
let value = EVPriceRuleStackList::decode_body(d)?;
f_3 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
time_anchor: f_0.ok_or(ExiError::MissingElement)?,
currency: f_1.ok_or(ExiError::MissingElement)?,
price_algorithm: f_2.ok_or(ExiError::MissingElement)?,
ev_price_rule_stacks: f_3.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct EVEnergyOffer {
pub ev_power_schedule: EVPowerSchedule,
pub ev_absolute_price_schedule: EVAbsolutePriceSchedule,
}
impl EVEnergyOffer {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 1, 1],
repeat_width: &[0, 0],
min: &[1, 1],
max: &[1, 1],
};
}
impl EVEnergyOffer {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.ev_power_schedule;
w.start(e, 0, 0)?;
item.encode_body(e)?;
w.finish(0, 1);
}
{
let item = &self.ev_absolute_price_schedule;
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl EVEnergyOffer {
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 = EVPowerSchedule::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = EVAbsolutePriceSchedule::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
ev_power_schedule: f_0.ok_or(ExiError::MissingElement)?,
ev_absolute_price_schedule: f_1.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct EVPowerProfileEntryList {
pub ev_power_profile_entry: Vec<PowerScheduleEntry>,
}
impl EVPowerProfileEntryList {
const SHAPE: Shape =
Shape { prod_before: &[0, 1], width: &[1, 1], repeat_width: &[2], min: &[1], max: &[2048] };
}
impl EVPowerProfileEntryList {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let items = &self.ev_power_profile_entry;
let count = items.len() as u32;
if count < 1 || count > 2048 {
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 EVPowerProfileEntryList {
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 = PowerScheduleEntry::decode_body(d)?;
f_0.push(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
ev_power_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 enum EVPowerProfileChoice {
DynamicEVPPTControlMode(DynamicEVPPTControlMode),
ScheduledEVPPTControlMode(ScheduledEVPPTControlMode),
}
impl EVPowerProfileChoice {
#[must_use]
pub const fn name(&self) -> &'static str {
match self {
Self::DynamicEVPPTControlMode(_) => "Dynamic_EVPPTControlMode",
Self::ScheduledEVPPTControlMode(_) => "Scheduled_EVPPTControlMode",
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct EVPowerProfile {
pub time_anchor: u64,
pub choice: EVPowerProfileChoice,
pub ev_power_profile_entries: EVPowerProfileEntryList,
}
impl EVPowerProfile {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 3, 4],
width: &[1, 2, 1, 1],
repeat_width: &[0, 0, 0],
min: &[1, 1, 1],
max: &[1, 1, 1],
};
}
impl EVPowerProfile {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.time_anchor;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.uint(u64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
{
let item = &self.choice;
match item {
EVPowerProfileChoice::DynamicEVPPTControlMode(value) => {
w.start_branch(e, 1, 0, 0)?;
value.encode_body(e)?;
}
EVPowerProfileChoice::ScheduledEVPPTControlMode(value) => {
w.start_branch(e, 1, 0, 1)?;
value.encode_body(e)?;
}
}
w.finish(1, 1);
}
{
let item = &self.ev_power_profile_entries;
w.start(e, 2, 0)?;
item.encode_body(e)?;
w.finish(2, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl EVPowerProfile {
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 = u64::try_from(d.uint()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, branch, .. } => {
let value = match branch {
0 => {
let value = DynamicEVPPTControlMode::decode_body(d)?;
EVPowerProfileChoice::DynamicEVPPTControlMode(value)
}
1 => {
let value = ScheduledEVPPTControlMode::decode_body(d)?;
EVPowerProfileChoice::ScheduledEVPPTControlMode(value)
}
_ => return Err(ExiError::UnknownEventCode),
};
f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
let value = EVPowerProfileEntryList::decode_body(d)?;
f_2 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
time_anchor: f_0.ok_or(ExiError::MissingElement)?,
choice: f_1.ok_or(ExiError::MissingElement)?,
ev_power_profile_entries: f_2.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct EVPowerScheduleEntryList {
pub ev_power_schedule_entry: Vec<EVPowerScheduleEntry>,
}
impl EVPowerScheduleEntryList {
const SHAPE: Shape =
Shape { prod_before: &[0, 1], width: &[1, 1], repeat_width: &[2], min: &[1], max: &[1024] };
}
impl EVPowerScheduleEntryList {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let items = &self.ev_power_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 EVPowerScheduleEntryList {
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 = EVPowerScheduleEntry::decode_body(d)?;
f_0.push(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
ev_power_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 EVPowerScheduleEntry {
pub duration: u32,
pub power: super::common::RationalNumber,
}
impl EVPowerScheduleEntry {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 1, 1],
repeat_width: &[0, 0],
min: &[1, 1],
max: &[1, 1],
};
}
impl EVPowerScheduleEntry {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.duration;
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.power;
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl EVPowerScheduleEntry {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
let mut f_0 = None;
let mut f_1 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = u32::try_from(d.uint()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = super::common::RationalNumber::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
duration: f_0.ok_or(ExiError::MissingElement)?,
power: f_1.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct EVPowerSchedule {
pub time_anchor: u64,
pub ev_power_schedule_entries: EVPowerScheduleEntryList,
}
impl EVPowerSchedule {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 1, 1],
repeat_width: &[0, 0],
min: &[1, 1],
max: &[1, 1],
};
}
impl EVPowerSchedule {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.time_anchor;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.uint(u64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
{
let item = &self.ev_power_schedule_entries;
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl EVPowerSchedule {
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 = u64::try_from(d.uint()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = EVPowerScheduleEntryList::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
time_anchor: f_0.ok_or(ExiError::MissingElement)?,
ev_power_schedule_entries: f_1.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct EVPriceRuleStackList {
pub ev_price_rule_stack: Vec<EVPriceRuleStack>,
}
impl EVPriceRuleStackList {
const SHAPE: Shape =
Shape { prod_before: &[0, 1], width: &[1, 1], repeat_width: &[2], min: &[1], max: &[1024] };
}
impl EVPriceRuleStackList {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let items = &self.ev_price_rule_stack;
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 EVPriceRuleStackList {
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 = EVPriceRuleStack::decode_body(d)?;
f_0.push(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
ev_price_rule_stack: {
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 EVPriceRuleStack {
pub duration: u32,
pub ev_price_rule: Vec<EVPriceRule>,
}
impl EVPriceRuleStack {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 1, 1],
repeat_width: &[0, 2],
min: &[1, 1],
max: &[1, 8],
};
}
impl EVPriceRuleStack {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.duration;
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 items = &self.ev_price_rule;
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, 1, c as u32)?;
item.encode_body(e)?;
}
if count > 0 {
w.finish(1, count);
}
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl EVPriceRuleStack {
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 = 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 = EVPriceRule::decode_body(d)?;
f_1.push(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
duration: f_0.ok_or(ExiError::MissingElement)?,
ev_price_rule: {
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 EVPriceRule {
pub energy_fee: super::common::RationalNumber,
pub power_range_start: super::common::RationalNumber,
}
impl EVPriceRule {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 1, 1],
repeat_width: &[0, 0],
min: &[1, 1],
max: &[1, 1],
};
}
impl EVPriceRule {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.energy_fee;
w.start(e, 0, 0)?;
item.encode_body(e)?;
w.finish(0, 1);
}
{
let item = &self.power_range_start;
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl EVPriceRule {
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 = super::common::RationalNumber::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = super::common::RationalNumber::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
energy_fee: f_0.ok_or(ExiError::MissingElement)?,
power_range_start: f_1.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct MeteringConfirmationReq {
pub header: super::common::MessageHeader,
pub signed_metering_data: SignedMeteringData,
}
impl MeteringConfirmationReq {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 1, 1],
repeat_width: &[0, 0],
min: &[1, 1],
max: &[1, 1],
};
}
impl MeteringConfirmationReq {
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.signed_metering_data;
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl MeteringConfirmationReq {
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 = super::common::MessageHeader::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = SignedMeteringData::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
header: f_0.ok_or(ExiError::MissingElement)?,
signed_metering_data: f_1.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct MeteringConfirmationRes {
pub header: super::common::MessageHeader,
pub response_code: super::common::ResponseCode,
}
impl MeteringConfirmationRes {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 1, 1],
repeat_width: &[0, 0],
min: &[1, 1],
max: &[1, 1],
};
}
impl MeteringConfirmationRes {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.header;
w.start(e, 0, 0)?;
item.encode_body(e)?;
w.finish(0, 1);
}
{
let item = &self.response_code;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), super::common::ResponseCode::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl MeteringConfirmationRes {
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 = super::common::MessageHeader::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = super::common::ResponseCode::from_index(
d.nbit(super::common::ResponseCode::WIDTH)?,
)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
header: f_0.ok_or(ExiError::MissingElement)?,
response_code: f_1.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct OverstayRuleList {
pub overstay_time_threshold: Option<u32>,
pub overstay_power_threshold: Option<super::common::RationalNumber>,
pub overstay_rule: Vec<OverstayRule>,
}
impl OverstayRuleList {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3],
width: &[2, 2, 1, 1],
repeat_width: &[0, 0, 2],
min: &[0, 0, 1],
max: &[1, 1, 5],
};
}
impl OverstayRuleList {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
if let Some(item) = &self.overstay_time_threshold {
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.overstay_power_threshold {
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 1);
}
{
let items = &self.overstay_rule;
let count = items.len() as u32;
if count < 1 || count > 5 {
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 OverstayRuleList {
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, .. } => {
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 = super::common::RationalNumber::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
let value = OverstayRule::decode_body(d)?;
f_2.push(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
overstay_time_threshold: f_0,
overstay_power_threshold: f_1,
overstay_rule: {
if (f_2.len() as u32) < 1 {
return Err(ExiError::MissingElement);
}
f_2
},
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct OverstayRule {
pub overstay_rule_description: Option<String>,
pub start_time: u32,
pub overstay_fee: super::common::RationalNumber,
pub overstay_fee_period: u32,
}
impl OverstayRule {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4],
width: &[2, 1, 1, 1, 1],
repeat_width: &[0, 0, 0, 0],
min: &[0, 1, 1, 1],
max: &[1, 1, 1, 1],
};
}
impl OverstayRule {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
if let Some(item) = &self.overstay_rule_description {
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.string(ValueCtx(123), item, Lengths::max(160))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
{
let item = &self.start_time;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.uint(u64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
{
let item = &self.overstay_fee;
w.start(e, 2, 0)?;
item.encode_body(e)?;
w.finish(2, 1);
}
{
let item = &self.overstay_fee_period;
w.start(e, 3, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.uint(u64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(3, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl OverstayRule {
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 = d.string(ValueCtx(123), Lengths::max(160))?;
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, .. } => {
let value = super::common::RationalNumber::decode_body(d)?;
f_2 = Some(value);
}
Step::Item { index: 3, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = u32::try_from(d.uint()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_3 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
overstay_rule_description: f_0,
start_time: f_1.ok_or(ExiError::MissingElement)?,
overstay_fee: f_2.ok_or(ExiError::MissingElement)?,
overstay_fee_period: f_3.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ParameterSet {
pub parameter_set_id: u16,
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, 32],
};
}
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.uint(u64::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 > 32 {
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 = u16::try_from(d.uint()?).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),
RationalNumber(super::common::RationalNumber),
FiniteString(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::RationalNumber(_) => "rationalNumber",
Self::FiniteString(_) => "finiteString",
}
}
}
#[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(112), item, Lengths::max(80))?;
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::RationalNumber(value) => {
w.start_branch(e, 1, 0, 4)?;
value.encode_body(e)?;
}
ParameterChoice::FiniteString(value) => {
w.start_branch(e, 1, 0, 5)?;
e.event(0, SIMPLE_WIDTH)?; e.string(ValueCtx(228), value, Lengths::max(80))?;
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(112), Lengths::max(80))?;
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 = super::common::RationalNumber::decode_body(d)?;
ParameterChoice::RationalNumber(value)
}
5 => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.string(ValueCtx(228), Lengths::max(80))?;
d.expect_event(0, SIMPLE_WIDTH)?; ParameterChoice::FiniteString(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 PnCAReqAuthorizationMode {
pub id: String,
pub gen_challenge: Vec<u8>,
pub contract_certificate_chain: ContractCertificateChain,
}
impl PnCAReqAuthorizationMode {
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 PnCAReqAuthorizationMode {
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(92), item, Lengths::max(65536))?;
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.contract_certificate_chain;
w.start(e, 2, 0)?;
item.encode_body(e)?;
w.finish(2, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl PnCAReqAuthorizationMode {
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(92), 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 { index: 2, .. } => {
let value = ContractCertificateChain::decode_body(d)?;
f_2 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
id: f_0.ok_or(ExiError::MissingElement)?,
gen_challenge: f_1.ok_or(ExiError::MissingElement)?,
contract_certificate_chain: f_2.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PnCASResAuthorizationMode {
pub gen_challenge: Vec<u8>,
pub supported_providers: Option<SupportedProvidersList>,
}
impl PnCASResAuthorizationMode {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 2, 1],
repeat_width: &[0, 0],
min: &[1, 0],
max: &[1, 1],
};
}
impl PnCASResAuthorizationMode {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.gen_challenge;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.binary(item, Lengths::exact(16))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
if let Some(item) = &self.supported_providers {
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl PnCASResAuthorizationMode {
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::exact(16))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = SupportedProvidersList::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self { gen_challenge: f_0.ok_or(ExiError::MissingElement)?, supported_providers: f_1 })
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PowerDeliveryReq {
pub header: super::common::MessageHeader,
pub ev_processing: super::common::Processing,
pub charge_progress: ChargeProgress,
pub ev_power_profile: Option<EVPowerProfile>,
pub bpt_channel_selection: Option<ChannelSelection>,
}
impl PowerDeliveryReq {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4, 5],
width: &[1, 1, 1, 2, 2, 1],
repeat_width: &[0, 0, 0, 0, 0],
min: &[1, 1, 1, 0, 0],
max: &[1, 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.header;
w.start(e, 0, 0)?;
item.encode_body(e)?;
w.finish(0, 1);
}
{
let item = &self.ev_processing;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), super::common::Processing::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
{
let item = &self.charge_progress;
w.start(e, 2, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), ChargeProgress::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(2, 1);
}
if let Some(item) = &self.ev_power_profile {
w.start(e, 3, 0)?;
item.encode_body(e)?;
w.finish(3, 1);
}
if let Some(item) = &self.bpt_channel_selection {
w.start(e, 4, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), ChannelSelection::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(4, 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;
let mut f_4 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
let value = super::common::MessageHeader::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = super::common::Processing::from_index(
d.nbit(super::common::Processing::WIDTH)?,
)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = ChargeProgress::from_index(d.nbit(ChargeProgress::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_2 = Some(value);
}
Step::Item { index: 3, .. } => {
let value = EVPowerProfile::decode_body(d)?;
f_3 = Some(value);
}
Step::Item { index: 4, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = ChannelSelection::from_index(d.nbit(ChannelSelection::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_4 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
header: f_0.ok_or(ExiError::MissingElement)?,
ev_processing: f_1.ok_or(ExiError::MissingElement)?,
charge_progress: f_2.ok_or(ExiError::MissingElement)?,
ev_power_profile: f_3,
bpt_channel_selection: f_4,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PowerDeliveryRes {
pub header: super::common::MessageHeader,
pub response_code: super::common::ResponseCode,
pub evse_status: Option<super::common::EVSEStatus>,
}
impl PowerDeliveryRes {
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 PowerDeliveryRes {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.header;
w.start(e, 0, 0)?;
item.encode_body(e)?;
w.finish(0, 1);
}
{
let item = &self.response_code;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), super::common::ResponseCode::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
if let Some(item) = &self.evse_status {
w.start(e, 2, 0)?;
item.encode_body(e)?;
w.finish(2, 1);
}
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;
let mut f_2 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
let value = super::common::MessageHeader::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = super::common::ResponseCode::from_index(
d.nbit(super::common::ResponseCode::WIDTH)?,
)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
let value = super::common::EVSEStatus::decode_body(d)?;
f_2 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
header: f_0.ok_or(ExiError::MissingElement)?,
response_code: f_1.ok_or(ExiError::MissingElement)?,
evse_status: f_2,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PowerScheduleEntryList {
pub power_schedule_entry: Vec<PowerScheduleEntry>,
}
impl PowerScheduleEntryList {
const SHAPE: Shape =
Shape { prod_before: &[0, 1], width: &[1, 1], repeat_width: &[2], min: &[1], max: &[1024] };
}
impl PowerScheduleEntryList {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let items = &self.power_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 PowerScheduleEntryList {
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 = PowerScheduleEntry::decode_body(d)?;
f_0.push(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
power_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 PowerScheduleEntry {
pub duration: u32,
pub power: super::common::RationalNumber,
pub power_l2: Option<super::common::RationalNumber>,
pub power_l3: Option<super::common::RationalNumber>,
}
impl PowerScheduleEntry {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4],
width: &[1, 1, 2, 2, 1],
repeat_width: &[0, 0, 0, 0],
min: &[1, 1, 0, 0],
max: &[1, 1, 1, 1],
};
}
impl PowerScheduleEntry {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.duration;
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.power;
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 1);
}
if let Some(item) = &self.power_l2 {
w.start(e, 2, 0)?;
item.encode_body(e)?;
w.finish(2, 1);
}
if let Some(item) = &self.power_l3 {
w.start(e, 3, 0)?;
item.encode_body(e)?;
w.finish(3, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl PowerScheduleEntry {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
let mut f_0 = None;
let mut f_1 = None;
let mut f_2 = None;
let mut f_3 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = u32::try_from(d.uint()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = super::common::RationalNumber::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
let value = super::common::RationalNumber::decode_body(d)?;
f_2 = Some(value);
}
Step::Item { index: 3, .. } => {
let value = super::common::RationalNumber::decode_body(d)?;
f_3 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
duration: f_0.ok_or(ExiError::MissingElement)?,
power: f_1.ok_or(ExiError::MissingElement)?,
power_l2: f_2,
power_l3: f_3,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PowerSchedule {
pub time_anchor: u64,
pub available_energy: Option<super::common::RationalNumber>,
pub power_tolerance: Option<super::common::RationalNumber>,
pub power_schedule_entries: PowerScheduleEntryList,
}
impl PowerSchedule {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4],
width: &[1, 2, 2, 1, 1],
repeat_width: &[0, 0, 0, 0],
min: &[1, 0, 0, 1],
max: &[1, 1, 1, 1],
};
}
impl PowerSchedule {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.time_anchor;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.uint(u64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
if let Some(item) = &self.available_energy {
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 1);
}
if let Some(item) = &self.power_tolerance {
w.start(e, 2, 0)?;
item.encode_body(e)?;
w.finish(2, 1);
}
{
let item = &self.power_schedule_entries;
w.start(e, 3, 0)?;
item.encode_body(e)?;
w.finish(3, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl PowerSchedule {
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 = u64::try_from(d.uint()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = super::common::RationalNumber::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
let value = super::common::RationalNumber::decode_body(d)?;
f_2 = Some(value);
}
Step::Item { index: 3, .. } => {
let value = PowerScheduleEntryList::decode_body(d)?;
f_3 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
time_anchor: f_0.ok_or(ExiError::MissingElement)?,
available_energy: f_1,
power_tolerance: f_2,
power_schedule_entries: f_3.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PriceLevelScheduleEntryList {
pub price_level_schedule_entry: Vec<PriceLevelScheduleEntry>,
}
impl PriceLevelScheduleEntryList {
const SHAPE: Shape =
Shape { prod_before: &[0, 1], width: &[1, 1], repeat_width: &[2], min: &[1], max: &[1024] };
}
impl PriceLevelScheduleEntryList {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let items = &self.price_level_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 PriceLevelScheduleEntryList {
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 = PriceLevelScheduleEntry::decode_body(d)?;
f_0.push(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
price_level_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 PriceLevelScheduleEntry {
pub duration: u32,
pub price_level: u8,
}
impl PriceLevelScheduleEntry {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 1, 1],
repeat_width: &[0, 0],
min: &[1, 1],
max: &[1, 1],
};
}
impl PriceLevelScheduleEntry {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.duration;
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.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);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl PriceLevelScheduleEntry {
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 = u8::try_from(d.restricted(0, 255)?)
.map_err(|_| ExiError::ValueOutOfRange)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
duration: f_0.ok_or(ExiError::MissingElement)?,
price_level: f_1.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PriceLevelSchedule {
pub id: Option<String>,
pub time_anchor: u64,
pub price_schedule_id: u32,
pub price_schedule_description: Option<String>,
pub number_of_price_levels: u8,
pub price_level_schedule_entries: PriceLevelScheduleEntryList,
}
impl PriceLevelSchedule {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4, 5, 6],
width: &[2, 1, 1, 2, 1, 1, 1],
repeat_width: &[0, 0, 0, 0, 0, 0],
min: &[0, 1, 1, 0, 1, 1],
max: &[1, 1, 1, 1, 1, 1],
};
}
impl PriceLevelSchedule {
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(92), item, Lengths::max(65536))?;
w.finish(0, 1);
}
{
let item = &self.time_anchor;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.uint(u64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
{
let item = &self.price_schedule_id;
w.start(e, 2, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.uint(u64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(2, 1);
}
if let Some(item) = &self.price_schedule_description {
w.start(e, 3, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.string(ValueCtx(153), item, Lengths::max(160))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(3, 1);
}
{
let item = &self.number_of_price_levels;
w.start(e, 4, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.restricted(i64::from(*item), 0, 255)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(4, 1);
}
{
let item = &self.price_level_schedule_entries;
w.start(e, 5, 0)?;
item.encode_body(e)?;
w.finish(5, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl PriceLevelSchedule {
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(92), Lengths::max(65536))?;
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 = u32::try_from(d.uint()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_2 = Some(value);
}
Step::Item { index: 3, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.string(ValueCtx(153), Lengths::max(160))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_3 = Some(value);
}
Step::Item { index: 4, .. } => {
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_4 = Some(value);
}
Step::Item { index: 5, .. } => {
let value = PriceLevelScheduleEntryList::decode_body(d)?;
f_5 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
id: f_0,
time_anchor: f_1.ok_or(ExiError::MissingElement)?,
price_schedule_id: f_2.ok_or(ExiError::MissingElement)?,
price_schedule_description: f_3,
number_of_price_levels: f_4.ok_or(ExiError::MissingElement)?,
price_level_schedule_entries: f_5.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PriceRuleStackList {
pub price_rule_stack: Vec<PriceRuleStack>,
}
impl PriceRuleStackList {
const SHAPE: Shape =
Shape { prod_before: &[0, 1], width: &[1, 1], repeat_width: &[2], min: &[1], max: &[1024] };
}
impl PriceRuleStackList {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let items = &self.price_rule_stack;
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 PriceRuleStackList {
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 = PriceRuleStack::decode_body(d)?;
f_0.push(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
price_rule_stack: {
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 PriceRuleStack {
pub duration: u32,
pub price_rule: Vec<PriceRule>,
}
impl PriceRuleStack {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 1, 1],
repeat_width: &[0, 2],
min: &[1, 1],
max: &[1, 8],
};
}
impl PriceRuleStack {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.duration;
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 items = &self.price_rule;
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, 1, c as u32)?;
item.encode_body(e)?;
}
if count > 0 {
w.finish(1, count);
}
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl PriceRuleStack {
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 = 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 = PriceRule::decode_body(d)?;
f_1.push(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
duration: f_0.ok_or(ExiError::MissingElement)?,
price_rule: {
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 PriceRule {
pub energy_fee: super::common::RationalNumber,
pub parking_fee: Option<super::common::RationalNumber>,
pub parking_fee_period: Option<u32>,
pub carbon_dioxide_emission: Option<u16>,
pub renewable_generation_percentage: Option<u8>,
pub power_range_start: super::common::RationalNumber,
}
impl PriceRule {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4, 5, 6],
width: &[1, 3, 3, 2, 2, 1, 1],
repeat_width: &[0, 0, 0, 0, 0, 0],
min: &[1, 0, 0, 0, 0, 1],
max: &[1, 1, 1, 1, 1, 1],
};
}
impl PriceRule {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.energy_fee;
w.start(e, 0, 0)?;
item.encode_body(e)?;
w.finish(0, 1);
}
if let Some(item) = &self.parking_fee {
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 1);
}
if let Some(item) = &self.parking_fee_period {
w.start(e, 2, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.uint(u64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(2, 1);
}
if let Some(item) = &self.carbon_dioxide_emission {
w.start(e, 3, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.uint(u64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(3, 1);
}
if let Some(item) = &self.renewable_generation_percentage {
w.start(e, 4, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.restricted(i64::from(*item), 0, 255)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(4, 1);
}
{
let item = &self.power_range_start;
w.start(e, 5, 0)?;
item.encode_body(e)?;
w.finish(5, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl PriceRule {
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 = super::common::RationalNumber::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = super::common::RationalNumber::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = u32::try_from(d.uint()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_2 = Some(value);
}
Step::Item { index: 3, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = u16::try_from(d.uint()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_3 = Some(value);
}
Step::Item { index: 4, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = u8::try_from(d.restricted(0, 255)?)
.map_err(|_| ExiError::ValueOutOfRange)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_4 = Some(value);
}
Step::Item { index: 5, .. } => {
let value = super::common::RationalNumber::decode_body(d)?;
f_5 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
energy_fee: f_0.ok_or(ExiError::MissingElement)?,
parking_fee: f_1,
parking_fee_period: f_2,
carbon_dioxide_emission: f_3,
renewable_generation_percentage: f_4,
power_range_start: f_5.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PriceSchedule {
pub time_anchor: u64,
pub price_schedule_id: u32,
pub price_schedule_description: Option<String>,
}
impl PriceSchedule {
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 PriceSchedule {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.time_anchor;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.uint(u64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
{
let item = &self.price_schedule_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.price_schedule_description {
w.start(e, 2, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.string(ValueCtx(153), item, Lengths::max(160))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(2, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl PriceSchedule {
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 = u64::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 { index: 2, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.string(ValueCtx(153), Lengths::max(160))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_2 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
time_anchor: f_0.ok_or(ExiError::MissingElement)?,
price_schedule_id: f_1.ok_or(ExiError::MissingElement)?,
price_schedule_description: f_2,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum ScheduleExchangeReqChoice {
DynamicSEReqControlMode(DynamicSEReqControlMode),
ScheduledSEReqControlMode(ScheduledSEReqControlMode),
}
impl ScheduleExchangeReqChoice {
#[must_use]
pub const fn name(&self) -> &'static str {
match self {
Self::DynamicSEReqControlMode(_) => "Dynamic_SEReqControlMode",
Self::ScheduledSEReqControlMode(_) => "Scheduled_SEReqControlMode",
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ScheduleExchangeReq {
pub header: super::common::MessageHeader,
pub maximum_supporting_points: u16,
pub choice: ScheduleExchangeReqChoice,
}
impl ScheduleExchangeReq {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 4],
width: &[1, 1, 2, 1],
repeat_width: &[0, 0, 0],
min: &[1, 1, 1],
max: &[1, 1, 1],
};
}
impl ScheduleExchangeReq {
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.maximum_supporting_points;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.restricted(i64::from(*item), 12, 1024)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
{
let item = &self.choice;
match item {
ScheduleExchangeReqChoice::DynamicSEReqControlMode(value) => {
w.start_branch(e, 2, 0, 0)?;
value.encode_body(e)?;
}
ScheduleExchangeReqChoice::ScheduledSEReqControlMode(value) => {
w.start_branch(e, 2, 0, 1)?;
value.encode_body(e)?;
}
}
w.finish(2, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl ScheduleExchangeReq {
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 = super::common::MessageHeader::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = u16::try_from(d.restricted(12, 1024)?)
.map_err(|_| ExiError::ValueOutOfRange)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { index: 2, branch, .. } => {
let value = match branch {
0 => {
let value = DynamicSEReqControlMode::decode_body(d)?;
ScheduleExchangeReqChoice::DynamicSEReqControlMode(value)
}
1 => {
let value = ScheduledSEReqControlMode::decode_body(d)?;
ScheduleExchangeReqChoice::ScheduledSEReqControlMode(value)
}
_ => return Err(ExiError::UnknownEventCode),
};
f_2 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
header: f_0.ok_or(ExiError::MissingElement)?,
maximum_supporting_points: 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 ScheduleExchangeResChoice {
DynamicSEResControlMode(DynamicSEResControlMode),
ScheduledSEResControlMode(ScheduledSEResControlMode),
}
impl ScheduleExchangeResChoice {
#[must_use]
pub const fn name(&self) -> &'static str {
match self {
Self::DynamicSEResControlMode(_) => "Dynamic_SEResControlMode",
Self::ScheduledSEResControlMode(_) => "Scheduled_SEResControlMode",
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ScheduleExchangeRes {
pub header: super::common::MessageHeader,
pub response_code: super::common::ResponseCode,
pub evse_processing: super::common::Processing,
pub go_to_pause: Option<bool>,
pub choice: ScheduleExchangeResChoice,
}
impl ScheduleExchangeRes {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4, 6],
width: &[1, 1, 1, 2, 2, 1],
repeat_width: &[0, 0, 0, 0, 0],
min: &[1, 1, 1, 0, 1],
max: &[1, 1, 1, 1, 1],
};
}
impl ScheduleExchangeRes {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.header;
w.start(e, 0, 0)?;
item.encode_body(e)?;
w.finish(0, 1);
}
{
let item = &self.response_code;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), super::common::ResponseCode::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
{
let item = &self.evse_processing;
w.start(e, 2, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), super::common::Processing::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(2, 1);
}
if let Some(item) = &self.go_to_pause {
w.start(e, 3, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.boolean(*item)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(3, 1);
}
{
let item = &self.choice;
match item {
ScheduleExchangeResChoice::DynamicSEResControlMode(value) => {
w.start_branch(e, 4, 0, 0)?;
value.encode_body(e)?;
}
ScheduleExchangeResChoice::ScheduledSEResControlMode(value) => {
w.start_branch(e, 4, 0, 1)?;
value.encode_body(e)?;
}
}
w.finish(4, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl ScheduleExchangeRes {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
let mut f_0 = None;
let mut f_1 = None;
let mut f_2 = None;
let mut f_3 = None;
let mut f_4 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
let value = super::common::MessageHeader::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = super::common::ResponseCode::from_index(
d.nbit(super::common::ResponseCode::WIDTH)?,
)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = super::common::Processing::from_index(
d.nbit(super::common::Processing::WIDTH)?,
)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_2 = Some(value);
}
Step::Item { index: 3, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.boolean()?;
d.expect_event(0, SIMPLE_WIDTH)?; f_3 = Some(value);
}
Step::Item { index: 4, branch, .. } => {
let value = match branch {
0 => {
let value = DynamicSEResControlMode::decode_body(d)?;
ScheduleExchangeResChoice::DynamicSEResControlMode(value)
}
1 => {
let value = ScheduledSEResControlMode::decode_body(d)?;
ScheduleExchangeResChoice::ScheduledSEResControlMode(value)
}
_ => return Err(ExiError::UnknownEventCode),
};
f_4 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
header: f_0.ok_or(ExiError::MissingElement)?,
response_code: f_1.ok_or(ExiError::MissingElement)?,
evse_processing: f_2.ok_or(ExiError::MissingElement)?,
go_to_pause: f_3,
choice: f_4.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ScheduleTuple {
pub schedule_tuple_id: u32,
pub charging_schedule: ChargingSchedule,
pub discharging_schedule: Option<ChargingSchedule>,
}
impl ScheduleTuple {
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 ScheduleTuple {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.schedule_tuple_id;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.uint(u64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
{
let item = &self.charging_schedule;
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 1);
}
if let Some(item) = &self.discharging_schedule {
w.start(e, 2, 0)?;
item.encode_body(e)?;
w.finish(2, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl ScheduleTuple {
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 = ChargingSchedule::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
let value = ChargingSchedule::decode_body(d)?;
f_2 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
schedule_tuple_id: f_0.ok_or(ExiError::MissingElement)?,
charging_schedule: f_1.ok_or(ExiError::MissingElement)?,
discharging_schedule: f_2,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ScheduledEVPPTControlMode {
pub selected_schedule_tuple_id: u32,
pub power_tolerance_acceptance: Option<PowerToleranceAcceptance>,
}
impl ScheduledEVPPTControlMode {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 2, 1],
repeat_width: &[0, 0],
min: &[1, 0],
max: &[1, 1],
};
}
impl ScheduledEVPPTControlMode {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.selected_schedule_tuple_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.power_tolerance_acceptance {
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), PowerToleranceAcceptance::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl ScheduledEVPPTControlMode {
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 = PowerToleranceAcceptance::from_index(
d.nbit(PowerToleranceAcceptance::WIDTH)?,
)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
selected_schedule_tuple_id: f_0.ok_or(ExiError::MissingElement)?,
power_tolerance_acceptance: f_1,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ScheduledSEReqControlMode {
pub departure_time: Option<u32>,
pub ev_target_energy_request: Option<super::common::RationalNumber>,
pub ev_maximum_energy_request: Option<super::common::RationalNumber>,
pub ev_minimum_energy_request: Option<super::common::RationalNumber>,
pub ev_energy_offer: Option<EVEnergyOffer>,
}
impl ScheduledSEReqControlMode {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4, 5],
width: &[3, 3, 3, 2, 2, 1],
repeat_width: &[0, 0, 0, 0, 0],
min: &[0, 0, 0, 0, 0],
max: &[1, 1, 1, 1, 1],
};
}
impl ScheduledSEReqControlMode {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
if let Some(item) = &self.departure_time {
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.uint(u64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
if let Some(item) = &self.ev_target_energy_request {
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 1);
}
if let Some(item) = &self.ev_maximum_energy_request {
w.start(e, 2, 0)?;
item.encode_body(e)?;
w.finish(2, 1);
}
if let Some(item) = &self.ev_minimum_energy_request {
w.start(e, 3, 0)?;
item.encode_body(e)?;
w.finish(3, 1);
}
if let Some(item) = &self.ev_energy_offer {
w.start(e, 4, 0)?;
item.encode_body(e)?;
w.finish(4, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl ScheduledSEReqControlMode {
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 = super::common::RationalNumber::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
let value = super::common::RationalNumber::decode_body(d)?;
f_2 = Some(value);
}
Step::Item { index: 3, .. } => {
let value = super::common::RationalNumber::decode_body(d)?;
f_3 = Some(value);
}
Step::Item { index: 4, .. } => {
let value = EVEnergyOffer::decode_body(d)?;
f_4 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
departure_time: f_0,
ev_target_energy_request: f_1,
ev_maximum_energy_request: f_2,
ev_minimum_energy_request: f_3,
ev_energy_offer: f_4,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ScheduledSEResControlMode {
pub schedule_tuple: Vec<ScheduleTuple>,
}
impl ScheduledSEResControlMode {
const SHAPE: Shape =
Shape { prod_before: &[0, 1], width: &[1, 1], repeat_width: &[2], min: &[1], max: &[3] };
}
impl ScheduledSEResControlMode {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let items = &self.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 ScheduledSEResControlMode {
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 = ScheduleTuple::decode_body(d)?;
f_0.push(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
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 ScheduledSMDTControlMode {
pub selected_schedule_tuple_id: u32,
}
impl ScheduledSMDTControlMode {
const SHAPE: Shape =
Shape { prod_before: &[0, 1], width: &[1, 1], repeat_width: &[0], min: &[1], max: &[1] };
}
impl ScheduledSMDTControlMode {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.selected_schedule_tuple_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 ScheduledSMDTControlMode {
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 { selected_schedule_tuple_id: f_0.ok_or(ExiError::MissingElement)? })
}
}
#[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: u16,
}
impl SelectedService {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 1, 1],
repeat_width: &[0, 0],
min: &[1, 1],
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);
}
{
let item = &self.parameter_set_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);
}
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 = u16::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 {
service_id: f_0.ok_or(ExiError::MissingElement)?,
parameter_set_id: f_1.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ServiceDetailReq {
pub header: super::common::MessageHeader,
pub service_id: u16,
}
impl ServiceDetailReq {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 1, 1],
repeat_width: &[0, 0],
min: &[1, 1],
max: &[1, 1],
};
}
impl ServiceDetailReq {
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.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);
}
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;
let mut f_1 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
let value = super::common::MessageHeader::decode_body(d)?;
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 { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
header: f_0.ok_or(ExiError::MissingElement)?,
service_id: f_1.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ServiceDetailRes {
pub header: super::common::MessageHeader,
pub response_code: super::common::ResponseCode,
pub service_id: u16,
pub service_parameter_list: ServiceParameterList,
}
impl ServiceDetailRes {
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 ServiceDetailRes {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.header;
w.start(e, 0, 0)?;
item.encode_body(e)?;
w.finish(0, 1);
}
{
let item = &self.response_code;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), super::common::ResponseCode::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
{
let item = &self.service_id;
w.start(e, 2, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.uint(u64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(2, 1);
}
{
let item = &self.service_parameter_list;
w.start(e, 3, 0)?;
item.encode_body(e)?;
w.finish(3, 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;
let mut f_3 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
let value = super::common::MessageHeader::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = super::common::ResponseCode::from_index(
d.nbit(super::common::ResponseCode::WIDTH)?,
)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = u16::try_from(d.uint()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_2 = Some(value);
}
Step::Item { index: 3, .. } => {
let value = ServiceParameterList::decode_body(d)?;
f_3 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
header: f_0.ok_or(ExiError::MissingElement)?,
response_code: f_1.ok_or(ExiError::MissingElement)?,
service_id: f_2.ok_or(ExiError::MissingElement)?,
service_parameter_list: f_3.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ServiceDiscoveryReq {
pub header: super::common::MessageHeader,
pub supported_service_i_ds: Option<ServiceIDList>,
}
impl ServiceDiscoveryReq {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 2, 1],
repeat_width: &[0, 0],
min: &[1, 0],
max: &[1, 1],
};
}
impl ServiceDiscoveryReq {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.header;
w.start(e, 0, 0)?;
item.encode_body(e)?;
w.finish(0, 1);
}
if let Some(item) = &self.supported_service_i_ds {
w.start(e, 1, 0)?;
item.encode_body(e)?;
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, .. } => {
let value = super::common::MessageHeader::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = ServiceIDList::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self { header: f_0.ok_or(ExiError::MissingElement)?, supported_service_i_ds: f_1 })
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ServiceDiscoveryRes {
pub header: super::common::MessageHeader,
pub response_code: super::common::ResponseCode,
pub service_renegotiation_supported: bool,
pub energy_transfer_service_list: ServiceList,
pub vas_list: Option<ServiceList>,
}
impl ServiceDiscoveryRes {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4, 5],
width: &[1, 1, 1, 1, 2, 1],
repeat_width: &[0, 0, 0, 0, 0],
min: &[1, 1, 1, 1, 0],
max: &[1, 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.header;
w.start(e, 0, 0)?;
item.encode_body(e)?;
w.finish(0, 1);
}
{
let item = &self.response_code;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), super::common::ResponseCode::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
{
let item = &self.service_renegotiation_supported;
w.start(e, 2, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.boolean(*item)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(2, 1);
}
{
let item = &self.energy_transfer_service_list;
w.start(e, 3, 0)?;
item.encode_body(e)?;
w.finish(3, 1);
}
if let Some(item) = &self.vas_list {
w.start(e, 4, 0)?;
item.encode_body(e)?;
w.finish(4, 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;
let mut f_4 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
let value = super::common::MessageHeader::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = super::common::ResponseCode::from_index(
d.nbit(super::common::ResponseCode::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 { index: 3, .. } => {
let value = ServiceList::decode_body(d)?;
f_3 = Some(value);
}
Step::Item { index: 4, .. } => {
let value = ServiceList::decode_body(d)?;
f_4 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
header: f_0.ok_or(ExiError::MissingElement)?,
response_code: f_1.ok_or(ExiError::MissingElement)?,
service_renegotiation_supported: f_2.ok_or(ExiError::MissingElement)?,
energy_transfer_service_list: f_3.ok_or(ExiError::MissingElement)?,
vas_list: f_4,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ServiceIDList {
pub service_id: Vec<u16>,
}
impl ServiceIDList {
const SHAPE: Shape =
Shape { prod_before: &[0, 1], width: &[1, 1], repeat_width: &[2], min: &[1], max: &[16] };
}
impl ServiceIDList {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let items = &self.service_id;
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)?;
e.event(0, SIMPLE_WIDTH)?; e.uint(u64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; }
if count > 0 {
w.finish(0, count);
}
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl ServiceIDList {
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 = u16::try_from(d.uint()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0.push(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
service_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 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: &[32] };
}
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 > 32 {
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 ServiceSelectionReq {
pub header: super::common::MessageHeader,
pub selected_energy_transfer_service: SelectedService,
pub selected_vas_list: Option<SelectedServiceList>,
}
impl ServiceSelectionReq {
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 ServiceSelectionReq {
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.selected_energy_transfer_service;
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 1);
}
if let Some(item) = &self.selected_vas_list {
w.start(e, 2, 0)?;
item.encode_body(e)?;
w.finish(2, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl ServiceSelectionReq {
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 = super::common::MessageHeader::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = SelectedService::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
let value = SelectedServiceList::decode_body(d)?;
f_2 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
header: f_0.ok_or(ExiError::MissingElement)?,
selected_energy_transfer_service: f_1.ok_or(ExiError::MissingElement)?,
selected_vas_list: f_2,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ServiceSelectionRes {
pub header: super::common::MessageHeader,
pub response_code: super::common::ResponseCode,
}
impl ServiceSelectionRes {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 1, 1],
repeat_width: &[0, 0],
min: &[1, 1],
max: &[1, 1],
};
}
impl ServiceSelectionRes {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.header;
w.start(e, 0, 0)?;
item.encode_body(e)?;
w.finish(0, 1);
}
{
let item = &self.response_code;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), super::common::ResponseCode::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl ServiceSelectionRes {
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 = super::common::MessageHeader::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = super::common::ResponseCode::from_index(
d.nbit(super::common::ResponseCode::WIDTH)?,
)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
header: f_0.ok_or(ExiError::MissingElement)?,
response_code: f_1.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Service {
pub service_id: u16,
pub free_service: bool,
}
impl Service {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 1, 1],
repeat_width: &[0, 0],
min: &[1, 1],
max: &[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);
}
{
let item = &self.free_service;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.boolean(*item)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 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;
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.boolean()?;
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)?,
free_service: f_1.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct SessionSetupReq {
pub header: super::common::MessageHeader,
pub evcc_id: String,
}
impl SessionSetupReq {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 1, 1],
repeat_width: &[0, 0],
min: &[1, 1],
max: &[1, 1],
};
}
impl SessionSetupReq {
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.evcc_id;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.string(ValueCtx(51), item, Lengths::max(255))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 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;
let mut f_1 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
let value = super::common::MessageHeader::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.string(ValueCtx(51), Lengths::max(255))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
header: f_0.ok_or(ExiError::MissingElement)?,
evcc_id: f_1.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct SessionSetupRes {
pub header: super::common::MessageHeader,
pub response_code: super::common::ResponseCode,
pub evse_id: String,
}
impl SessionSetupRes {
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 SessionSetupRes {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.header;
w.start(e, 0, 0)?;
item.encode_body(e)?;
w.finish(0, 1);
}
{
let item = &self.response_code;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), super::common::ResponseCode::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
{
let item = &self.evse_id;
w.start(e, 2, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.string(ValueCtx(72), item, Lengths::max(255))?;
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, .. } => {
let value = super::common::MessageHeader::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = super::common::ResponseCode::from_index(
d.nbit(super::common::ResponseCode::WIDTH)?,
)?;
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(72), Lengths::max(255))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_2 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
header: f_0.ok_or(ExiError::MissingElement)?,
response_code: f_1.ok_or(ExiError::MissingElement)?,
evse_id: f_2.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct SessionStopReq {
pub header: super::common::MessageHeader,
pub charging_session: ChargingSession,
pub ev_termination_code: Option<String>,
pub ev_termination_explanation: Option<String>,
}
impl SessionStopReq {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4],
width: &[1, 1, 2, 2, 1],
repeat_width: &[0, 0, 0, 0],
min: &[1, 1, 0, 0],
max: &[1, 1, 1, 1],
};
}
impl SessionStopReq {
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.charging_session;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), ChargingSession::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
if let Some(item) = &self.ev_termination_code {
w.start(e, 2, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.string(ValueCtx(79), item, Lengths::max(80))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(2, 1);
}
if let Some(item) = &self.ev_termination_explanation {
w.start(e, 3, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.string(ValueCtx(80), item, Lengths::max(160))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(3, 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;
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 = super::common::MessageHeader::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = ChargingSession::from_index(d.nbit(ChargingSession::WIDTH)?)?;
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(79), Lengths::max(80))?;
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(80), Lengths::max(160))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_3 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
header: f_0.ok_or(ExiError::MissingElement)?,
charging_session: f_1.ok_or(ExiError::MissingElement)?,
ev_termination_code: f_2,
ev_termination_explanation: f_3,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct SessionStopRes {
pub header: super::common::MessageHeader,
pub response_code: super::common::ResponseCode,
}
impl SessionStopRes {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 1, 1],
repeat_width: &[0, 0],
min: &[1, 1],
max: &[1, 1],
};
}
impl SessionStopRes {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.header;
w.start(e, 0, 0)?;
item.encode_body(e)?;
w.finish(0, 1);
}
{
let item = &self.response_code;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), super::common::ResponseCode::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 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;
let mut f_1 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
let value = super::common::MessageHeader::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = super::common::ResponseCode::from_index(
d.nbit(super::common::ResponseCode::WIDTH)?,
)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
header: f_0.ok_or(ExiError::MissingElement)?,
response_code: f_1.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct SignedCertificateChain {
pub id: String,
pub certificate: Vec<u8>,
pub sub_certificates: Option<SubCertificates>,
}
impl SignedCertificateChain {
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 SignedCertificateChain {
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(92), 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(1600))?;
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 SignedCertificateChain {
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(92), Lengths::max(65536))?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.binary(Lengths::max(1600))?;
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.ok_or(ExiError::MissingElement)?,
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 enum SignedInstallationDataChoice {
SECP521EncryptedPrivateKey(Vec<u8>),
X448EncryptedPrivateKey(Vec<u8>),
TPMEncryptedPrivateKey(Vec<u8>),
}
impl SignedInstallationDataChoice {
#[must_use]
pub const fn name(&self) -> &'static str {
match self {
Self::SECP521EncryptedPrivateKey(_) => "SECP521_EncryptedPrivateKey",
Self::X448EncryptedPrivateKey(_) => "X448_EncryptedPrivateKey",
Self::TPMEncryptedPrivateKey(_) => "TPM_EncryptedPrivateKey",
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct SignedInstallationData {
pub id: String,
pub contract_certificate_chain: ContractCertificateChain,
pub ec_dh_curve: EcdhCurve,
pub dh_public_key: Vec<u8>,
pub choice: SignedInstallationDataChoice,
}
impl SignedInstallationData {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4, 7],
width: &[1, 1, 1, 1, 2, 1],
repeat_width: &[0, 0, 0, 0, 0],
min: &[1, 1, 1, 1, 1],
max: &[1, 1, 1, 1, 1],
};
}
impl SignedInstallationData {
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(92), item, Lengths::max(65536))?;
w.finish(0, 1);
}
{
let item = &self.contract_certificate_chain;
w.start(e, 1, 0)?;
item.encode_body(e)?;
w.finish(1, 1);
}
{
let item = &self.ec_dh_curve;
w.start(e, 2, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), EcdhCurve::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(2, 1);
}
{
let item = &self.dh_public_key;
w.start(e, 3, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.binary(item, Lengths::exact(133))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(3, 1);
}
{
let item = &self.choice;
match item {
SignedInstallationDataChoice::SECP521EncryptedPrivateKey(value) => {
w.start_branch(e, 4, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.binary(value, Lengths::exact(94))?;
e.event(0, SIMPLE_WIDTH)?; }
SignedInstallationDataChoice::X448EncryptedPrivateKey(value) => {
w.start_branch(e, 4, 0, 1)?;
e.event(0, SIMPLE_WIDTH)?; e.binary(value, Lengths::exact(84))?;
e.event(0, SIMPLE_WIDTH)?; }
SignedInstallationDataChoice::TPMEncryptedPrivateKey(value) => {
w.start_branch(e, 4, 0, 2)?;
e.event(0, SIMPLE_WIDTH)?; e.binary(value, Lengths::exact(206))?;
e.event(0, SIMPLE_WIDTH)?; }
}
w.finish(4, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl SignedInstallationData {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
let mut f_0 = None;
let mut f_1 = None;
let mut f_2 = None;
let mut f_3 = None;
let mut f_4 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
let value = d.string(ValueCtx(92), Lengths::max(65536))?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
let value = ContractCertificateChain::decode_body(d)?;
f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = EcdhCurve::from_index(d.nbit(EcdhCurve::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_2 = Some(value);
}
Step::Item { index: 3, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.binary(Lengths::exact(133))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_3 = Some(value);
}
Step::Item { index: 4, branch, .. } => {
let value = match branch {
0 => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.binary(Lengths::exact(94))?;
d.expect_event(0, SIMPLE_WIDTH)?; SignedInstallationDataChoice::SECP521EncryptedPrivateKey(value)
}
1 => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.binary(Lengths::exact(84))?;
d.expect_event(0, SIMPLE_WIDTH)?; SignedInstallationDataChoice::X448EncryptedPrivateKey(value)
}
2 => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.binary(Lengths::exact(206))?;
d.expect_event(0, SIMPLE_WIDTH)?; SignedInstallationDataChoice::TPMEncryptedPrivateKey(value)
}
_ => return Err(ExiError::UnknownEventCode),
};
f_4 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
id: f_0.ok_or(ExiError::MissingElement)?,
contract_certificate_chain: f_1.ok_or(ExiError::MissingElement)?,
ec_dh_curve: f_2.ok_or(ExiError::MissingElement)?,
dh_public_key: f_3.ok_or(ExiError::MissingElement)?,
choice: f_4.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum SignedMeteringDataChoice {
DynamicSMDTControlMode(DynamicSMDTControlMode),
ScheduledSMDTControlMode(ScheduledSMDTControlMode),
}
impl SignedMeteringDataChoice {
#[must_use]
pub const fn name(&self) -> &'static str {
match self {
Self::DynamicSMDTControlMode(_) => "Dynamic_SMDTControlMode",
Self::ScheduledSMDTControlMode(_) => "Scheduled_SMDTControlMode",
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct SignedMeteringData {
pub id: String,
pub session_id: Vec<u8>,
pub meter_info: super::common::MeterInfo,
pub receipt: Option<super::common::Receipt>,
pub choice: SignedMeteringDataChoice,
}
impl SignedMeteringData {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4, 6],
width: &[1, 1, 1, 2, 2, 1],
repeat_width: &[0, 0, 0, 0, 0],
min: &[1, 1, 1, 0, 1],
max: &[1, 1, 1, 1, 1],
};
}
impl SignedMeteringData {
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(92), 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::exact(8))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
{
let item = &self.meter_info;
w.start(e, 2, 0)?;
item.encode_body(e)?;
w.finish(2, 1);
}
if let Some(item) = &self.receipt {
w.start(e, 3, 0)?;
item.encode_body(e)?;
w.finish(3, 1);
}
{
let item = &self.choice;
match item {
SignedMeteringDataChoice::DynamicSMDTControlMode(value) => {
w.start_branch(e, 4, 0, 0)?;
value.encode_body(e)?;
}
SignedMeteringDataChoice::ScheduledSMDTControlMode(value) => {
w.start_branch(e, 4, 0, 1)?;
value.encode_body(e)?;
}
}
w.finish(4, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl SignedMeteringData {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
let mut f_0 = None;
let mut f_1 = None;
let mut f_2 = None;
let mut f_3 = None;
let mut f_4 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
let value = d.string(ValueCtx(92), Lengths::max(65536))?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.binary(Lengths::exact(8))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
let value = super::common::MeterInfo::decode_body(d)?;
f_2 = Some(value);
}
Step::Item { index: 3, .. } => {
let value = super::common::Receipt::decode_body(d)?;
f_3 = Some(value);
}
Step::Item { index: 4, branch, .. } => {
let value = match branch {
0 => {
let value = DynamicSMDTControlMode::decode_body(d)?;
SignedMeteringDataChoice::DynamicSMDTControlMode(value)
}
1 => {
let value = ScheduledSMDTControlMode::decode_body(d)?;
SignedMeteringDataChoice::ScheduledSMDTControlMode(value)
}
_ => return Err(ExiError::UnknownEventCode),
};
f_4 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
id: f_0.ok_or(ExiError::MissingElement)?,
session_id: f_1.ok_or(ExiError::MissingElement)?,
meter_info: f_2.ok_or(ExiError::MissingElement)?,
receipt: f_3,
choice: f_4.ok_or(ExiError::MissingElement)?,
})
}
}
#[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: &[3] };
}
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 > 3 {
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(1600))?;
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(1600))?;
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 SupportedProvidersList {
pub provider_id: Vec<String>,
}
impl SupportedProvidersList {
const SHAPE: Shape =
Shape { prod_before: &[0, 1], width: &[1, 1], repeat_width: &[2], min: &[1], max: &[128] };
}
impl SupportedProvidersList {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let items = &self.provider_id;
let count = items.len() as u32;
if count < 1 || count > 128 {
return Err(ExiError::ValueOutOfRange);
}
for (c, item) in items.iter().enumerate() {
w.start(e, 0, c as u32)?;
e.event(0, SIMPLE_WIDTH)?; e.string(ValueCtx(156), item, Lengths::max(80))?;
e.event(0, SIMPLE_WIDTH)?; }
if count > 0 {
w.finish(0, count);
}
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl SupportedProvidersList {
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.string(ValueCtx(156), Lengths::max(80))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_0.push(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
provider_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 TargetPosition {
pub target_offset_x: u16,
pub target_offset_y: u16,
}
impl TargetPosition {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2],
width: &[1, 1, 1],
repeat_width: &[0, 0],
min: &[1, 1],
max: &[1, 1],
};
}
impl TargetPosition {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.target_offset_x;
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.target_offset_y;
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 TargetPosition {
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 = u16::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 {
target_offset_x: f_0.ok_or(ExiError::MissingElement)?,
target_offset_y: f_1.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct TaxRuleList {
pub tax_rule: Vec<TaxRule>,
}
impl TaxRuleList {
const SHAPE: Shape =
Shape { prod_before: &[0, 1], width: &[1, 1], repeat_width: &[2], min: &[1], max: &[10] };
}
impl TaxRuleList {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let items = &self.tax_rule;
let count = items.len() as u32;
if count < 1 || count > 10 {
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 TaxRuleList {
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 = TaxRule::decode_body(d)?;
f_0.push(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
tax_rule: {
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 TaxRule {
pub tax_rule_id: u32,
pub tax_rule_name: Option<String>,
pub tax_rate: super::common::RationalNumber,
pub tax_included_in_price: Option<bool>,
pub applies_to_energy_fee: bool,
pub applies_to_parking_fee: bool,
pub applies_to_overstay_fee: bool,
pub applies_minimum_maximum_cost: bool,
}
impl TaxRule {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4, 5, 6, 7, 8],
width: &[1, 2, 1, 2, 1, 1, 1, 1, 1],
repeat_width: &[0, 0, 0, 0, 0, 0, 0, 0],
min: &[1, 0, 1, 0, 1, 1, 1, 1],
max: &[1, 1, 1, 1, 1, 1, 1, 1],
};
}
impl TaxRule {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.tax_rule_id;
w.start(e, 0, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.uint(u64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(0, 1);
}
if let Some(item) = &self.tax_rule_name {
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.string(ValueCtx(209), item, Lengths::max(80))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
{
let item = &self.tax_rate;
w.start(e, 2, 0)?;
item.encode_body(e)?;
w.finish(2, 1);
}
if let Some(item) = &self.tax_included_in_price {
w.start(e, 3, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.boolean(*item)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(3, 1);
}
{
let item = &self.applies_to_energy_fee;
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.applies_to_parking_fee;
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.applies_to_overstay_fee;
w.start(e, 6, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.boolean(*item)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(6, 1);
}
{
let item = &self.applies_minimum_maximum_cost;
w.start(e, 7, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.boolean(*item)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(7, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl TaxRule {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
let mut f_0 = None;
let mut f_1 = None;
let mut f_2 = None;
let mut f_3 = None;
let mut f_4 = None;
let mut f_5 = None;
let mut f_6 = None;
let mut f_7 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = 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 = d.string(ValueCtx(209), Lengths::max(80))?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
let value = super::common::RationalNumber::decode_body(d)?;
f_2 = Some(value);
}
Step::Item { index: 3, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.boolean()?;
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, .. } => {
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, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = d.boolean()?;
d.expect_event(0, SIMPLE_WIDTH)?; f_7 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
tax_rule_id: f_0.ok_or(ExiError::MissingElement)?,
tax_rule_name: f_1,
tax_rate: f_2.ok_or(ExiError::MissingElement)?,
tax_included_in_price: f_3,
applies_to_energy_fee: f_4.ok_or(ExiError::MissingElement)?,
applies_to_parking_fee: f_5.ok_or(ExiError::MissingElement)?,
applies_to_overstay_fee: f_6.ok_or(ExiError::MissingElement)?,
applies_minimum_maximum_cost: f_7.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct VehicleCheckInReq {
pub header: super::common::MessageHeader,
pub ev_check_in_status: EvCheckInStatus,
pub parking_method: ParkingMethod,
pub vehicle_frame: Option<i16>,
pub device_offset: Option<i16>,
pub vehicle_travel: Option<i16>,
}
impl VehicleCheckInReq {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4, 5, 6],
width: &[1, 1, 1, 3, 2, 2, 1],
repeat_width: &[0, 0, 0, 0, 0, 0],
min: &[1, 1, 1, 0, 0, 0],
max: &[1, 1, 1, 1, 1, 1],
};
}
impl VehicleCheckInReq {
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.ev_check_in_status;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), EvCheckInStatus::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
{
let item = &self.parking_method;
w.start(e, 2, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), ParkingMethod::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(2, 1);
}
if let Some(item) = &self.vehicle_frame {
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.device_offset {
w.start(e, 4, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.int(i64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(4, 1);
}
if let Some(item) = &self.vehicle_travel {
w.start(e, 5, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.int(i64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(5, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl VehicleCheckInReq {
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 = super::common::MessageHeader::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = EvCheckInStatus::from_index(d.nbit(EvCheckInStatus::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = ParkingMethod::from_index(d.nbit(ParkingMethod::WIDTH)?)?;
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 = i16::try_from(d.int()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_4 = Some(value);
}
Step::Item { index: 5, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = i16::try_from(d.int()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_5 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
header: f_0.ok_or(ExiError::MissingElement)?,
ev_check_in_status: f_1.ok_or(ExiError::MissingElement)?,
parking_method: f_2.ok_or(ExiError::MissingElement)?,
vehicle_frame: f_3,
device_offset: f_4,
vehicle_travel: f_5,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct VehicleCheckInRes {
pub header: super::common::MessageHeader,
pub response_code: super::common::ResponseCode,
pub parking_space: Option<i16>,
pub device_location: Option<i16>,
pub target_distance: Option<i16>,
}
impl VehicleCheckInRes {
const SHAPE: Shape = Shape {
prod_before: &[0, 1, 2, 3, 4, 5],
width: &[1, 1, 3, 2, 2, 1],
repeat_width: &[0, 0, 0, 0, 0],
min: &[1, 1, 0, 0, 0],
max: &[1, 1, 1, 1, 1],
};
}
impl VehicleCheckInRes {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.header;
w.start(e, 0, 0)?;
item.encode_body(e)?;
w.finish(0, 1);
}
{
let item = &self.response_code;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), super::common::ResponseCode::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
if let Some(item) = &self.parking_space {
w.start(e, 2, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.int(i64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(2, 1);
}
if let Some(item) = &self.device_location {
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.target_distance {
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 VehicleCheckInRes {
pub fn decode_body(d: &mut Decoder<'_>) -> ExiResult<Self> {
d.enter()?;
let mut r = SeqReader::new(Self::SHAPE);
let mut f_0 = None;
let mut f_1 = None;
let mut f_2 = None;
let mut f_3 = None;
let mut f_4 = None;
loop {
match r.next(d)? {
Step::End => break,
Step::Item { index: 0, .. } => {
let value = super::common::MessageHeader::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = super::common::ResponseCode::from_index(
d.nbit(super::common::ResponseCode::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 { 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 = i16::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 {
header: f_0.ok_or(ExiError::MissingElement)?,
response_code: f_1.ok_or(ExiError::MissingElement)?,
parking_space: f_2,
device_location: f_3,
target_distance: f_4,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct VehicleCheckOutReq {
pub header: super::common::MessageHeader,
pub ev_check_out_status: EvCheckOutStatus,
pub check_out_time: u64,
}
impl VehicleCheckOutReq {
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 VehicleCheckOutReq {
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.ev_check_out_status;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), EvCheckOutStatus::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
{
let item = &self.check_out_time;
w.start(e, 2, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.uint(u64::from(*item))?;
e.event(0, SIMPLE_WIDTH)?; w.finish(2, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl VehicleCheckOutReq {
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 = super::common::MessageHeader::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = EvCheckOutStatus::from_index(d.nbit(EvCheckOutStatus::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = u64::try_from(d.uint()?).map_err(|_| ExiError::IntegerOverflow)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_2 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
header: f_0.ok_or(ExiError::MissingElement)?,
ev_check_out_status: f_1.ok_or(ExiError::MissingElement)?,
check_out_time: f_2.ok_or(ExiError::MissingElement)?,
})
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct VehicleCheckOutRes {
pub header: super::common::MessageHeader,
pub response_code: super::common::ResponseCode,
pub evse_check_out_status: EvseCheckOutStatus,
}
impl VehicleCheckOutRes {
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 VehicleCheckOutRes {
pub fn encode_body(&self, e: &mut Encoder<'_>) -> ExiResult<()> {
e.enter()?;
let mut w = SeqWriter::new(Self::SHAPE);
{
let item = &self.header;
w.start(e, 0, 0)?;
item.encode_body(e)?;
w.finish(0, 1);
}
{
let item = &self.response_code;
w.start(e, 1, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), super::common::ResponseCode::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(1, 1);
}
{
let item = &self.evse_check_out_status;
w.start(e, 2, 0)?;
e.event(0, SIMPLE_WIDTH)?; e.nbit(item.as_index(), EvseCheckOutStatus::WIDTH)?;
e.event(0, SIMPLE_WIDTH)?; w.finish(2, 1);
}
w.end(e)?;
e.leave();
Ok(())
}
}
impl VehicleCheckOutRes {
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 = super::common::MessageHeader::decode_body(d)?;
f_0 = Some(value);
}
Step::Item { index: 1, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = super::common::ResponseCode::from_index(
d.nbit(super::common::ResponseCode::WIDTH)?,
)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_1 = Some(value);
}
Step::Item { index: 2, .. } => {
d.expect_event(0, SIMPLE_WIDTH)?; let value = EvseCheckOutStatus::from_index(d.nbit(EvseCheckOutStatus::WIDTH)?)?;
d.expect_event(0, SIMPLE_WIDTH)?; f_2 = Some(value);
}
Step::Item { .. } => return Err(ExiError::UnknownEventCode),
}
}
d.leave();
Ok(Self {
header: f_0.ok_or(ExiError::MissingElement)?,
response_code: f_1.ok_or(ExiError::MissingElement)?,
evse_check_out_status: f_2.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 Authorization {
EIM = 0,
PnC = 1,
}
impl Authorization {
pub const WIDTH: u32 = 1;
pub const ALL: [Self; 2] = [Self::EIM, Self::PnC];
#[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::EIM,
1 => Self::PnC,
_ => return Err(ExiError::UnknownEnumValue),
})
}
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::EIM => "EIM",
Self::PnC => "PnC",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[repr(u16)]
pub enum ChannelSelection {
Charge = 0,
Discharge = 1,
}
impl ChannelSelection {
pub const WIDTH: u32 = 1;
pub const ALL: [Self; 2] = [Self::Charge, Self::Discharge];
#[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::Charge,
1 => Self::Discharge,
_ => return Err(ExiError::UnknownEnumValue),
})
}
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::Charge => "Charge",
Self::Discharge => "Discharge",
}
}
}
#[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,
Standby = 2,
ScheduleRenegotiation = 3,
}
impl ChargeProgress {
pub const WIDTH: u32 = 2;
pub const ALL: [Self; 4] =
[Self::Start, Self::Stop, Self::Standby, Self::ScheduleRenegotiation];
#[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::Standby,
3 => Self::ScheduleRenegotiation,
_ => return Err(ExiError::UnknownEnumValue),
})
}
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::Start => "Start",
Self::Stop => "Stop",
Self::Standby => "Standby",
Self::ScheduleRenegotiation => "ScheduleRenegotiation",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[repr(u16)]
pub enum ChargingSession {
Pause = 0,
Terminate = 1,
ServiceRenegotiation = 2,
}
impl ChargingSession {
pub const WIDTH: u32 = 2;
pub const ALL: [Self; 3] = [Self::Pause, Self::Terminate, Self::ServiceRenegotiation];
#[must_use]
pub const fn as_index(self) -> u64 {
self as u64
}
pub const fn from_index(index: u64) -> ExiResult<Self> {
Ok(match index {
0 => Self::Pause,
1 => Self::Terminate,
2 => Self::ServiceRenegotiation,
_ => return Err(ExiError::UnknownEnumValue),
})
}
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::Pause => "Pause",
Self::Terminate => "Terminate",
Self::ServiceRenegotiation => "ServiceRenegotiation",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[repr(u16)]
pub enum EcdhCurve {
SECP521 = 0,
X448 = 1,
}
impl EcdhCurve {
pub const WIDTH: u32 = 1;
pub const ALL: [Self; 2] = [Self::SECP521, Self::X448];
#[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::SECP521,
1 => Self::X448,
_ => return Err(ExiError::UnknownEnumValue),
})
}
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::SECP521 => "SECP521",
Self::X448 => "X448",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[repr(u16)]
pub enum EvCheckInStatus {
CheckIn = 0,
Processing = 1,
Completed = 2,
}
impl EvCheckInStatus {
pub const WIDTH: u32 = 2;
pub const ALL: [Self; 3] = [Self::CheckIn, Self::Processing, Self::Completed];
#[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::CheckIn,
1 => Self::Processing,
2 => Self::Completed,
_ => return Err(ExiError::UnknownEnumValue),
})
}
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::CheckIn => "CheckIn",
Self::Processing => "Processing",
Self::Completed => "Completed",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[repr(u16)]
pub enum EvCheckOutStatus {
CheckOut = 0,
Processing = 1,
Completed = 2,
}
impl EvCheckOutStatus {
pub const WIDTH: u32 = 2;
pub const ALL: [Self; 3] = [Self::CheckOut, Self::Processing, Self::Completed];
#[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::CheckOut,
1 => Self::Processing,
2 => Self::Completed,
_ => return Err(ExiError::UnknownEnumValue),
})
}
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::CheckOut => "CheckOut",
Self::Processing => "Processing",
Self::Completed => "Completed",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[repr(u16)]
pub enum EvseCheckOutStatus {
Scheduled = 0,
Completed = 1,
}
impl EvseCheckOutStatus {
pub const WIDTH: u32 = 1;
pub const ALL: [Self; 2] = [Self::Scheduled, Self::Completed];
#[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::Scheduled,
1 => Self::Completed,
_ => return Err(ExiError::UnknownEnumValue),
})
}
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::Scheduled => "Scheduled",
Self::Completed => "Completed",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[repr(u16)]
pub enum ParkingMethod {
AutoParking = 0,
MVGuideManual = 1,
Manual = 2,
}
impl ParkingMethod {
pub const WIDTH: u32 = 2;
pub const ALL: [Self; 3] = [Self::AutoParking, Self::MVGuideManual, Self::Manual];
#[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::AutoParking,
1 => Self::MVGuideManual,
2 => Self::Manual,
_ => return Err(ExiError::UnknownEnumValue),
})
}
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::AutoParking => "AutoParking",
Self::MVGuideManual => "MVGuideManual",
Self::Manual => "Manual",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[repr(u16)]
pub enum PowerToleranceAcceptance {
PowerToleranceNotConfirmed = 0,
PowerToleranceConfirmed = 1,
}
impl PowerToleranceAcceptance {
pub const WIDTH: u32 = 1;
pub const ALL: [Self; 2] = [Self::PowerToleranceNotConfirmed, Self::PowerToleranceConfirmed];
#[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::PowerToleranceNotConfirmed,
1 => Self::PowerToleranceConfirmed,
_ => return Err(ExiError::UnknownEnumValue),
})
}
#[must_use]
pub const fn as_str(self) -> &'static str {
match self {
Self::PowerToleranceNotConfirmed => "PowerToleranceNotConfirmed",
Self::PowerToleranceConfirmed => "PowerToleranceConfirmed",
}
}
}
pub const DOCUMENT_WIDTH: u32 = 6;
pub const FRAGMENT_WIDTH: u32 = 9;
pub const FRAGMENT_ED_CODE: u64 = 282;
pub const XMLDSIG_FRAGMENT_WIDTH: u32 = 6;
pub const XMLDSIG_FRAGMENT_ED_CODE: u64 = 46;
impl AuthorizationReq {
pub const DOCUMENT_CODE: u64 = 0;
}
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 = 1;
}
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 AuthorizationSetupReq {
pub const DOCUMENT_CODE: u64 = 2;
}
impl crate::exi::ExiDocument for AuthorizationSetupReq {
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 AuthorizationSetupRes {
pub const DOCUMENT_CODE: u64 = 3;
}
impl crate::exi::ExiDocument for AuthorizationSetupRes {
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 = 7;
}
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 = 8;
}
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 MeteringConfirmationReq {
pub const DOCUMENT_CODE: u64 = 16;
}
impl crate::exi::ExiDocument for MeteringConfirmationReq {
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 MeteringConfirmationRes {
pub const DOCUMENT_CODE: u64 = 17;
}
impl crate::exi::ExiDocument for MeteringConfirmationRes {
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 = 21;
}
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 = 22;
}
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 ScheduleExchangeReq {
pub const DOCUMENT_CODE: u64 = 27;
}
impl crate::exi::ExiDocument for ScheduleExchangeReq {
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 ScheduleExchangeRes {
pub const DOCUMENT_CODE: u64 = 28;
}
impl crate::exi::ExiDocument for ScheduleExchangeRes {
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 = 29;
}
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 = 30;
}
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 = 31;
}
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 = 32;
}
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 ServiceSelectionReq {
pub const DOCUMENT_CODE: u64 = 33;
}
impl crate::exi::ExiDocument for ServiceSelectionReq {
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 ServiceSelectionRes {
pub const DOCUMENT_CODE: u64 = 34;
}
impl crate::exi::ExiDocument for ServiceSelectionRes {
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 = 35;
}
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 = 36;
}
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 = 37;
}
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 = 38;
}
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 SignedInstallationData {
pub const DOCUMENT_CODE: u64 = 45;
}
impl crate::exi::ExiDocument for SignedInstallationData {
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 SignedMeteringData {
pub const DOCUMENT_CODE: u64 = 46;
}
impl crate::exi::ExiDocument for SignedMeteringData {
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 VehicleCheckInReq {
pub const DOCUMENT_CODE: u64 = 49;
}
impl crate::exi::ExiDocument for VehicleCheckInReq {
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 VehicleCheckInRes {
pub const DOCUMENT_CODE: u64 = 50;
}
impl crate::exi::ExiDocument for VehicleCheckInRes {
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 VehicleCheckOutReq {
pub const DOCUMENT_CODE: u64 = 51;
}
impl crate::exi::ExiDocument for VehicleCheckOutReq {
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 VehicleCheckOutRes {
pub const DOCUMENT_CODE: u64 = 52;
}
impl crate::exi::ExiDocument for VehicleCheckOutRes {
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 {
AuthorizationReq(AuthorizationReq),
AuthorizationRes(AuthorizationRes),
AuthorizationSetupReq(AuthorizationSetupReq),
AuthorizationSetupRes(AuthorizationSetupRes),
CertificateInstallationReq(CertificateInstallationReq),
CertificateInstallationRes(CertificateInstallationRes),
MeteringConfirmationReq(MeteringConfirmationReq),
MeteringConfirmationRes(MeteringConfirmationRes),
PowerDeliveryReq(PowerDeliveryReq),
PowerDeliveryRes(PowerDeliveryRes),
ScheduleExchangeReq(ScheduleExchangeReq),
ScheduleExchangeRes(ScheduleExchangeRes),
ServiceDetailReq(ServiceDetailReq),
ServiceDetailRes(ServiceDetailRes),
ServiceDiscoveryReq(ServiceDiscoveryReq),
ServiceDiscoveryRes(ServiceDiscoveryRes),
ServiceSelectionReq(ServiceSelectionReq),
ServiceSelectionRes(ServiceSelectionRes),
SessionSetupReq(SessionSetupReq),
SessionSetupRes(SessionSetupRes),
SessionStopReq(SessionStopReq),
SessionStopRes(SessionStopRes),
SignedInstallationData(SignedInstallationData),
SignedMeteringData(SignedMeteringData),
VehicleCheckInReq(VehicleCheckInReq),
VehicleCheckInRes(VehicleCheckInRes),
VehicleCheckOutReq(VehicleCheckOutReq),
VehicleCheckOutRes(VehicleCheckOutRes),
}
impl Document {
#[must_use]
pub const fn name(&self) -> &'static str {
match self {
Self::AuthorizationReq(_) => "AuthorizationReq",
Self::AuthorizationRes(_) => "AuthorizationRes",
Self::AuthorizationSetupReq(_) => "AuthorizationSetupReq",
Self::AuthorizationSetupRes(_) => "AuthorizationSetupRes",
Self::CertificateInstallationReq(_) => "CertificateInstallationReq",
Self::CertificateInstallationRes(_) => "CertificateInstallationRes",
Self::MeteringConfirmationReq(_) => "MeteringConfirmationReq",
Self::MeteringConfirmationRes(_) => "MeteringConfirmationRes",
Self::PowerDeliveryReq(_) => "PowerDeliveryReq",
Self::PowerDeliveryRes(_) => "PowerDeliveryRes",
Self::ScheduleExchangeReq(_) => "ScheduleExchangeReq",
Self::ScheduleExchangeRes(_) => "ScheduleExchangeRes",
Self::ServiceDetailReq(_) => "ServiceDetailReq",
Self::ServiceDetailRes(_) => "ServiceDetailRes",
Self::ServiceDiscoveryReq(_) => "ServiceDiscoveryReq",
Self::ServiceDiscoveryRes(_) => "ServiceDiscoveryRes",
Self::ServiceSelectionReq(_) => "ServiceSelectionReq",
Self::ServiceSelectionRes(_) => "ServiceSelectionRes",
Self::SessionSetupReq(_) => "SessionSetupReq",
Self::SessionSetupRes(_) => "SessionSetupRes",
Self::SessionStopReq(_) => "SessionStopReq",
Self::SessionStopRes(_) => "SessionStopRes",
Self::SignedInstallationData(_) => "SignedInstallationData",
Self::SignedMeteringData(_) => "SignedMeteringData",
Self::VehicleCheckInReq(_) => "VehicleCheckInReq",
Self::VehicleCheckInRes(_) => "VehicleCheckInRes",
Self::VehicleCheckOutReq(_) => "VehicleCheckOutReq",
Self::VehicleCheckOutRes(_) => "VehicleCheckOutRes",
}
}
#[must_use]
pub const fn code(&self) -> u64 {
match self {
Self::AuthorizationReq(_) => 0,
Self::AuthorizationRes(_) => 1,
Self::AuthorizationSetupReq(_) => 2,
Self::AuthorizationSetupRes(_) => 3,
Self::CertificateInstallationReq(_) => 7,
Self::CertificateInstallationRes(_) => 8,
Self::MeteringConfirmationReq(_) => 16,
Self::MeteringConfirmationRes(_) => 17,
Self::PowerDeliveryReq(_) => 21,
Self::PowerDeliveryRes(_) => 22,
Self::ScheduleExchangeReq(_) => 27,
Self::ScheduleExchangeRes(_) => 28,
Self::ServiceDetailReq(_) => 29,
Self::ServiceDetailRes(_) => 30,
Self::ServiceDiscoveryReq(_) => 31,
Self::ServiceDiscoveryRes(_) => 32,
Self::ServiceSelectionReq(_) => 33,
Self::ServiceSelectionRes(_) => 34,
Self::SessionSetupReq(_) => 35,
Self::SessionSetupRes(_) => 36,
Self::SessionStopReq(_) => 37,
Self::SessionStopRes(_) => 38,
Self::SignedInstallationData(_) => 45,
Self::SignedMeteringData(_) => 46,
Self::VehicleCheckInReq(_) => 49,
Self::VehicleCheckInRes(_) => 50,
Self::VehicleCheckOutReq(_) => 51,
Self::VehicleCheckOutRes(_) => 52,
}
}
}
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::AuthorizationReq(m) => m.encode_body(&mut e)?,
Self::AuthorizationRes(m) => m.encode_body(&mut e)?,
Self::AuthorizationSetupReq(m) => m.encode_body(&mut e)?,
Self::AuthorizationSetupRes(m) => m.encode_body(&mut e)?,
Self::CertificateInstallationReq(m) => m.encode_body(&mut e)?,
Self::CertificateInstallationRes(m) => m.encode_body(&mut e)?,
Self::MeteringConfirmationReq(m) => m.encode_body(&mut e)?,
Self::MeteringConfirmationRes(m) => m.encode_body(&mut e)?,
Self::PowerDeliveryReq(m) => m.encode_body(&mut e)?,
Self::PowerDeliveryRes(m) => m.encode_body(&mut e)?,
Self::ScheduleExchangeReq(m) => m.encode_body(&mut e)?,
Self::ScheduleExchangeRes(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::ServiceSelectionReq(m) => m.encode_body(&mut e)?,
Self::ServiceSelectionRes(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::SignedInstallationData(m) => m.encode_body(&mut e)?,
Self::SignedMeteringData(m) => m.encode_body(&mut e)?,
Self::VehicleCheckInReq(m) => m.encode_body(&mut e)?,
Self::VehicleCheckInRes(m) => m.encode_body(&mut e)?,
Self::VehicleCheckOutReq(m) => m.encode_body(&mut e)?,
Self::VehicleCheckOutRes(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::AuthorizationReq(AuthorizationReq::decode_body(&mut d)?),
1 => Self::AuthorizationRes(AuthorizationRes::decode_body(&mut d)?),
2 => Self::AuthorizationSetupReq(AuthorizationSetupReq::decode_body(&mut d)?),
3 => Self::AuthorizationSetupRes(AuthorizationSetupRes::decode_body(&mut d)?),
7 => Self::CertificateInstallationReq(CertificateInstallationReq::decode_body(&mut d)?),
8 => Self::CertificateInstallationRes(CertificateInstallationRes::decode_body(&mut d)?),
16 => Self::MeteringConfirmationReq(MeteringConfirmationReq::decode_body(&mut d)?),
17 => Self::MeteringConfirmationRes(MeteringConfirmationRes::decode_body(&mut d)?),
21 => Self::PowerDeliveryReq(PowerDeliveryReq::decode_body(&mut d)?),
22 => Self::PowerDeliveryRes(PowerDeliveryRes::decode_body(&mut d)?),
27 => Self::ScheduleExchangeReq(ScheduleExchangeReq::decode_body(&mut d)?),
28 => Self::ScheduleExchangeRes(ScheduleExchangeRes::decode_body(&mut d)?),
29 => Self::ServiceDetailReq(ServiceDetailReq::decode_body(&mut d)?),
30 => Self::ServiceDetailRes(ServiceDetailRes::decode_body(&mut d)?),
31 => Self::ServiceDiscoveryReq(ServiceDiscoveryReq::decode_body(&mut d)?),
32 => Self::ServiceDiscoveryRes(ServiceDiscoveryRes::decode_body(&mut d)?),
33 => Self::ServiceSelectionReq(ServiceSelectionReq::decode_body(&mut d)?),
34 => Self::ServiceSelectionRes(ServiceSelectionRes::decode_body(&mut d)?),
35 => Self::SessionSetupReq(SessionSetupReq::decode_body(&mut d)?),
36 => Self::SessionSetupRes(SessionSetupRes::decode_body(&mut d)?),
37 => Self::SessionStopReq(SessionStopReq::decode_body(&mut d)?),
38 => Self::SessionStopRes(SessionStopRes::decode_body(&mut d)?),
45 => Self::SignedInstallationData(SignedInstallationData::decode_body(&mut d)?),
46 => Self::SignedMeteringData(SignedMeteringData::decode_body(&mut d)?),
49 => Self::VehicleCheckInReq(VehicleCheckInReq::decode_body(&mut d)?),
50 => Self::VehicleCheckInRes(VehicleCheckInRes::decode_body(&mut d)?),
51 => Self::VehicleCheckOutReq(VehicleCheckOutReq::decode_body(&mut d)?),
52 => Self::VehicleCheckOutRes(VehicleCheckOutRes::decode_body(&mut d)?),
_ => return Err(ExiError::UnknownEventCode),
};
d.finish()?;
Ok(value)
}
}
impl Document {
#[must_use]
pub const fn header(&self) -> Option<&super::common::MessageHeader> {
match self {
Self::AuthorizationReq(m) => Some(&m.header),
Self::AuthorizationRes(m) => Some(&m.header),
Self::AuthorizationSetupReq(m) => Some(&m.header),
Self::AuthorizationSetupRes(m) => Some(&m.header),
Self::CertificateInstallationReq(m) => Some(&m.header),
Self::CertificateInstallationRes(m) => Some(&m.header),
Self::MeteringConfirmationReq(m) => Some(&m.header),
Self::MeteringConfirmationRes(m) => Some(&m.header),
Self::PowerDeliveryReq(m) => Some(&m.header),
Self::PowerDeliveryRes(m) => Some(&m.header),
Self::ScheduleExchangeReq(m) => Some(&m.header),
Self::ScheduleExchangeRes(m) => Some(&m.header),
Self::ServiceDetailReq(m) => Some(&m.header),
Self::ServiceDetailRes(m) => Some(&m.header),
Self::ServiceDiscoveryReq(m) => Some(&m.header),
Self::ServiceDiscoveryRes(m) => Some(&m.header),
Self::ServiceSelectionReq(m) => Some(&m.header),
Self::ServiceSelectionRes(m) => Some(&m.header),
Self::SessionSetupReq(m) => Some(&m.header),
Self::SessionSetupRes(m) => Some(&m.header),
Self::SessionStopReq(m) => Some(&m.header),
Self::SessionStopRes(m) => Some(&m.header),
Self::VehicleCheckInReq(m) => Some(&m.header),
Self::VehicleCheckInRes(m) => Some(&m.header),
Self::VehicleCheckOutReq(m) => Some(&m.header),
Self::VehicleCheckOutRes(m) => Some(&m.header),
_ => None,
}
}
pub const fn header_mut(&mut self) -> Option<&mut super::common::MessageHeader> {
match self {
Self::AuthorizationReq(m) => Some(&mut m.header),
Self::AuthorizationRes(m) => Some(&mut m.header),
Self::AuthorizationSetupReq(m) => Some(&mut m.header),
Self::AuthorizationSetupRes(m) => Some(&mut m.header),
Self::CertificateInstallationReq(m) => Some(&mut m.header),
Self::CertificateInstallationRes(m) => Some(&mut m.header),
Self::MeteringConfirmationReq(m) => Some(&mut m.header),
Self::MeteringConfirmationRes(m) => Some(&mut m.header),
Self::PowerDeliveryReq(m) => Some(&mut m.header),
Self::PowerDeliveryRes(m) => Some(&mut m.header),
Self::ScheduleExchangeReq(m) => Some(&mut m.header),
Self::ScheduleExchangeRes(m) => Some(&mut m.header),
Self::ServiceDetailReq(m) => Some(&mut m.header),
Self::ServiceDetailRes(m) => Some(&mut m.header),
Self::ServiceDiscoveryReq(m) => Some(&mut m.header),
Self::ServiceDiscoveryRes(m) => Some(&mut m.header),
Self::ServiceSelectionReq(m) => Some(&mut m.header),
Self::ServiceSelectionRes(m) => Some(&mut m.header),
Self::SessionSetupReq(m) => Some(&mut m.header),
Self::SessionSetupRes(m) => Some(&mut m.header),
Self::SessionStopReq(m) => Some(&mut m.header),
Self::SessionStopRes(m) => Some(&mut m.header),
Self::VehicleCheckInReq(m) => Some(&mut m.header),
Self::VehicleCheckInRes(m) => Some(&mut m.header),
Self::VehicleCheckOutReq(m) => Some(&mut m.header),
Self::VehicleCheckOutRes(m) => Some(&mut m.header),
_ => None,
}
}
}
impl Document {
#[must_use]
pub const fn response_code(&self) -> Option<super::common::ResponseCode> {
match self {
Self::AuthorizationRes(m) => Some(m.response_code),
Self::AuthorizationSetupRes(m) => Some(m.response_code),
Self::CertificateInstallationRes(m) => Some(m.response_code),
Self::MeteringConfirmationRes(m) => Some(m.response_code),
Self::PowerDeliveryRes(m) => Some(m.response_code),
Self::ScheduleExchangeRes(m) => Some(m.response_code),
Self::ServiceDetailRes(m) => Some(m.response_code),
Self::ServiceDiscoveryRes(m) => Some(m.response_code),
Self::ServiceSelectionRes(m) => Some(m.response_code),
Self::SessionSetupRes(m) => Some(m.response_code),
Self::SessionStopRes(m) => Some(m.response_code),
Self::VehicleCheckInRes(m) => Some(m.response_code),
Self::VehicleCheckOutRes(m) => Some(m.response_code),
_ => None,
}
}
}
impl Document {
#[must_use]
pub const fn fragment_code(&self) -> u64 {
match self {
Self::AuthorizationReq(_) => 10,
Self::AuthorizationRes(_) => 11,
Self::AuthorizationSetupReq(_) => 13,
Self::AuthorizationSetupRes(_) => 14,
Self::CertificateInstallationReq(_) => 27,
Self::CertificateInstallationRes(_) => 28,
Self::MeteringConfirmationReq(_) => 119,
Self::MeteringConfirmationRes(_) => 120,
Self::PowerDeliveryReq(_) => 154,
Self::PowerDeliveryRes(_) => 155,
Self::ScheduleExchangeReq(_) => 193,
Self::ScheduleExchangeRes(_) => 194,
Self::ServiceDetailReq(_) => 208,
Self::ServiceDetailRes(_) => 209,
Self::ServiceDiscoveryReq(_) => 210,
Self::ServiceDiscoveryRes(_) => 211,
Self::ServiceSelectionReq(_) => 217,
Self::ServiceSelectionRes(_) => 218,
Self::SessionSetupReq(_) => 221,
Self::SessionSetupRes(_) => 222,
Self::SessionStopReq(_) => 223,
Self::SessionStopRes(_) => 224,
Self::SignedInstallationData(_) => 231,
Self::SignedMeteringData(_) => 232,
Self::VehicleCheckInReq(_) => 258,
Self::VehicleCheckInRes(_) => 259,
Self::VehicleCheckOutReq(_) => 260,
Self::VehicleCheckOutRes(_) => 261,
}
}
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::AuthorizationReq(m) => m.encode_body(&mut e)?,
Self::AuthorizationRes(m) => m.encode_body(&mut e)?,
Self::AuthorizationSetupReq(m) => m.encode_body(&mut e)?,
Self::AuthorizationSetupRes(m) => m.encode_body(&mut e)?,
Self::CertificateInstallationReq(m) => m.encode_body(&mut e)?,
Self::CertificateInstallationRes(m) => m.encode_body(&mut e)?,
Self::MeteringConfirmationReq(m) => m.encode_body(&mut e)?,
Self::MeteringConfirmationRes(m) => m.encode_body(&mut e)?,
Self::PowerDeliveryReq(m) => m.encode_body(&mut e)?,
Self::PowerDeliveryRes(m) => m.encode_body(&mut e)?,
Self::ScheduleExchangeReq(m) => m.encode_body(&mut e)?,
Self::ScheduleExchangeRes(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::ServiceSelectionReq(m) => m.encode_body(&mut e)?,
Self::ServiceSelectionRes(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::SignedInstallationData(m) => m.encode_body(&mut e)?,
Self::SignedMeteringData(m) => m.encode_body(&mut e)?,
Self::VehicleCheckInReq(m) => m.encode_body(&mut e)?,
Self::VehicleCheckInRes(m) => m.encode_body(&mut e)?,
Self::VehicleCheckOutReq(m) => m.encode_body(&mut e)?,
Self::VehicleCheckOutRes(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)? {
10 => Self::AuthorizationReq(AuthorizationReq::decode_body(&mut d)?),
11 => Self::AuthorizationRes(AuthorizationRes::decode_body(&mut d)?),
13 => Self::AuthorizationSetupReq(AuthorizationSetupReq::decode_body(&mut d)?),
14 => Self::AuthorizationSetupRes(AuthorizationSetupRes::decode_body(&mut d)?),
27 => {
Self::CertificateInstallationReq(CertificateInstallationReq::decode_body(&mut d)?)
}
28 => {
Self::CertificateInstallationRes(CertificateInstallationRes::decode_body(&mut d)?)
}
119 => Self::MeteringConfirmationReq(MeteringConfirmationReq::decode_body(&mut d)?),
120 => Self::MeteringConfirmationRes(MeteringConfirmationRes::decode_body(&mut d)?),
154 => Self::PowerDeliveryReq(PowerDeliveryReq::decode_body(&mut d)?),
155 => Self::PowerDeliveryRes(PowerDeliveryRes::decode_body(&mut d)?),
193 => Self::ScheduleExchangeReq(ScheduleExchangeReq::decode_body(&mut d)?),
194 => Self::ScheduleExchangeRes(ScheduleExchangeRes::decode_body(&mut d)?),
208 => Self::ServiceDetailReq(ServiceDetailReq::decode_body(&mut d)?),
209 => Self::ServiceDetailRes(ServiceDetailRes::decode_body(&mut d)?),
210 => Self::ServiceDiscoveryReq(ServiceDiscoveryReq::decode_body(&mut d)?),
211 => Self::ServiceDiscoveryRes(ServiceDiscoveryRes::decode_body(&mut d)?),
217 => Self::ServiceSelectionReq(ServiceSelectionReq::decode_body(&mut d)?),
218 => Self::ServiceSelectionRes(ServiceSelectionRes::decode_body(&mut d)?),
221 => Self::SessionSetupReq(SessionSetupReq::decode_body(&mut d)?),
222 => Self::SessionSetupRes(SessionSetupRes::decode_body(&mut d)?),
223 => Self::SessionStopReq(SessionStopReq::decode_body(&mut d)?),
224 => Self::SessionStopRes(SessionStopRes::decode_body(&mut d)?),
231 => Self::SignedInstallationData(SignedInstallationData::decode_body(&mut d)?),
232 => Self::SignedMeteringData(SignedMeteringData::decode_body(&mut d)?),
258 => Self::VehicleCheckInReq(VehicleCheckInReq::decode_body(&mut d)?),
259 => Self::VehicleCheckInRes(VehicleCheckInRes::decode_body(&mut d)?),
260 => Self::VehicleCheckOutReq(VehicleCheckOutReq::decode_body(&mut d)?),
261 => Self::VehicleCheckOutRes(VehicleCheckOutRes::decode_body(&mut d)?),
_ => return Err(ExiError::UnknownEventCode),
};
d.expect_event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
d.finish()?;
Ok(value)
}
}
impl AbsolutePriceSchedule {
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 AdditionalServiceList {
pub const FRAGMENT_CODE: u64 = 2;
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 AdditionalService {
pub const FRAGMENT_CODE: u64 = 3;
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 = 10;
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 = 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 AuthorizationSetupReq {
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 AuthorizationSetupRes {
pub const FRAGMENT_CODE: u64 = 14;
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 CertificateChain {
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 CertificateInstallationReq {
pub const FRAGMENT_CODE: u64 = 27;
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 = 28;
pub fn encode_fragment(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
e.finish()
}
pub fn to_fragment(&self) -> ExiResult<Vec<u8>> {
crate::exi::encode_growing(|buf| self.encode_fragment(buf))
}
pub fn from_fragment(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.expect_event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
d.finish()?;
Ok(value)
}
}
impl ContractCertificateChain {
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 DynamicEVPPTControlMode {
pub const FRAGMENT_CODE: u64 = 50;
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 DynamicSEReqControlMode {
pub const FRAGMENT_CODE: u64 = 51;
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 DynamicSEResControlMode {
pub const FRAGMENT_CODE: u64 = 52;
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 DynamicSMDTControlMode {
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 EIMAReqAuthorizationMode {
pub const FRAGMENT_CODE: u64 = 55;
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 EIMASResAuthorizationMode {
pub const FRAGMENT_CODE: u64 = 56;
pub fn encode_fragment(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
e.finish()
}
pub fn to_fragment(&self) -> ExiResult<Vec<u8>> {
crate::exi::encode_growing(|buf| self.encode_fragment(buf))
}
pub fn from_fragment(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.expect_event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
d.finish()?;
Ok(value)
}
}
impl EVAbsolutePriceSchedule {
pub const FRAGMENT_CODE: u64 = 58;
pub fn encode_fragment(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
e.finish()
}
pub fn to_fragment(&self) -> ExiResult<Vec<u8>> {
crate::exi::encode_growing(|buf| self.encode_fragment(buf))
}
pub fn from_fragment(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.expect_event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
d.finish()?;
Ok(value)
}
}
impl EVEnergyOffer {
pub const FRAGMENT_CODE: u64 = 62;
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 EVPowerProfile {
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 EVPowerProfileEntryList {
pub const FRAGMENT_CODE: u64 = 70;
pub fn encode_fragment(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
e.finish()
}
pub fn to_fragment(&self) -> ExiResult<Vec<u8>> {
crate::exi::encode_growing(|buf| self.encode_fragment(buf))
}
pub fn from_fragment(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.expect_event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
d.finish()?;
Ok(value)
}
}
impl EVPowerSchedule {
pub const FRAGMENT_CODE: u64 = 72;
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 EVPowerScheduleEntryList {
pub const FRAGMENT_CODE: u64 = 73;
pub fn encode_fragment(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
e.finish()
}
pub fn to_fragment(&self) -> ExiResult<Vec<u8>> {
crate::exi::encode_growing(|buf| self.encode_fragment(buf))
}
pub fn from_fragment(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.expect_event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
d.finish()?;
Ok(value)
}
}
impl EVPowerScheduleEntry {
pub const FRAGMENT_CODE: u64 = 74;
pub fn encode_fragment(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
e.finish()
}
pub fn to_fragment(&self) -> ExiResult<Vec<u8>> {
crate::exi::encode_growing(|buf| self.encode_fragment(buf))
}
pub fn from_fragment(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.expect_event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
d.finish()?;
Ok(value)
}
}
impl EVPriceRule {
pub const FRAGMENT_CODE: u64 = 75;
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 EVPriceRuleStack {
pub const FRAGMENT_CODE: u64 = 76;
pub fn encode_fragment(&self, buf: &mut [u8]) -> ExiResult<usize> {
let mut e = Encoder::new(buf);
e.write_header(crate::exi::Header::ISO15118)?;
e.event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
self.encode_body(&mut e)?;
e.event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
e.finish()
}
pub fn to_fragment(&self) -> ExiResult<Vec<u8>> {
crate::exi::encode_growing(|buf| self.encode_fragment(buf))
}
pub fn from_fragment(bytes: &[u8]) -> ExiResult<Self> {
let mut d = Decoder::new(bytes);
d.read_header()?;
d.expect_event(Self::FRAGMENT_CODE, FRAGMENT_WIDTH)?;
let value = Self::decode_body(&mut d)?;
d.expect_event(FRAGMENT_ED_CODE, FRAGMENT_WIDTH)?;
d.finish()?;
Ok(value)
}
}
impl EVPriceRuleStackList {
pub const FRAGMENT_CODE: u64 = 77;
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 MeteringConfirmationReq {
pub const FRAGMENT_CODE: u64 = 119;
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 MeteringConfirmationRes {
pub const FRAGMENT_CODE: u64 = 120;
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 SignedCertificateChain {
pub const FRAGMENT_CODE: u64 = 128;
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 OverstayRule {
pub const FRAGMENT_CODE: u64 = 135;
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 OverstayRuleList {
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 = 143;
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 = 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 PnCAReqAuthorizationMode {
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 PnCASResAuthorizationMode {
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 PowerDeliveryReq {
pub const FRAGMENT_CODE: u64 = 154;
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 = 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 PowerSchedule {
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 PowerScheduleEntryList {
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 PriceLevelSchedule {
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 PriceLevelScheduleEntryList {
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 PriceLevelScheduleEntry {
pub const FRAGMENT_CODE: u64 = 169;
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 PriceRule {
pub const FRAGMENT_CODE: u64 = 170;
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 PriceRuleStack {
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 PriceRuleStackList {
pub const FRAGMENT_CODE: u64 = 172;
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 EMAIDList {
pub const FRAGMENT_CODE: u64 = 175;
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 ScheduleExchangeReq {
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 ScheduleExchangeRes {
pub const FRAGMENT_CODE: u64 = 194;
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 ScheduleTuple {
pub const FRAGMENT_CODE: u64 = 195;
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 ScheduledEVPPTControlMode {
pub const FRAGMENT_CODE: u64 = 197;
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 ScheduledSEReqControlMode {
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 ScheduledSEResControlMode {
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 ScheduledSMDTControlMode {
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 SelectedServiceList {
pub const FRAGMENT_CODE: u64 = 206;
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 = 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 ServiceDetailReq {
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 ServiceDetailRes {
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 ServiceDiscoveryReq {
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 ServiceDiscoveryRes {
pub const FRAGMENT_CODE: u64 = 211;
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 = 215;
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 ServiceSelectionReq {
pub const FRAGMENT_CODE: u64 = 217;
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 ServiceSelectionRes {
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 SessionSetupReq {
pub const FRAGMENT_CODE: u64 = 221;
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 = 222;
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 = 223;
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 = 224;
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 SignedInstallationData {
pub const FRAGMENT_CODE: u64 = 231;
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 SignedMeteringData {
pub const FRAGMENT_CODE: u64 = 232;
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 SubCertificates {
pub const FRAGMENT_CODE: u64 = 234;
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 SupportedProvidersList {
pub const FRAGMENT_CODE: u64 = 235;
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 ServiceIDList {
pub const FRAGMENT_CODE: u64 = 236;
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 TaxRule {
pub const FRAGMENT_CODE: u64 = 246;
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 TaxRuleList {
pub const FRAGMENT_CODE: u64 = 250;
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 VehicleCheckInReq {
pub const FRAGMENT_CODE: u64 = 258;
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 VehicleCheckInRes {
pub const FRAGMENT_CODE: u64 = 259;
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 VehicleCheckOutReq {
pub const FRAGMENT_CODE: u64 = 260;
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 VehicleCheckOutRes {
pub const FRAGMENT_CODE: u64 = 261;
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)
}
}