This is an automated email from the ASF dual-hosted git repository.
jfeinauer pushed a commit to branch feature/plc4rs
in repository https://gitbox.apache.org/repos/asf/plc4x.git
The following commit(s) were added to refs/heads/feature/plc4rs by this push:
new d324f242f2 ARRAY_SIZE_xxx is now implemented corrrectly
d324f242f2 is described below
commit d324f242f29e67a63e94605c496c4442f4e63074
Author: julian <[email protected]>
AuthorDate: Mon Jun 6 21:22:44 2022 +0200
ARRAY_SIZE_xxx is now implemented corrrectly
---
.../plc4x/language/rust/ExpressionVisitor.java | 103 +++++++++++++++++++++
.../language/rust/RustLanguageTemplateHelper.java | 8 ++
.../templates/rust/complex-type-template.rs.ftlh | 9 +-
.../generated-sources/plc4x/src/ModbusConstants.rs | 1 -
.../plc4x/src/ModbusDeviceInformationObject.rs | 3 +-
.../plc4x/src/ModbusPDUGetComEventLogResponse.rs | 3 +-
.../plc4x/src/ModbusPDUReadCoilsResponse.rs | 3 +-
.../ModbusPDUReadDeviceIdentificationRequest.rs | 1 -
.../ModbusPDUReadDeviceIdentificationResponse.rs | 4 +-
.../src/ModbusPDUReadDiscreteInputsResponse.rs | 3 +-
.../plc4x/src/ModbusPDUReadFifoQueueResponse.rs | 6 +-
.../plc4x/src/ModbusPDUReadFileRecordRequest.rs | 7 +-
.../plc4x/src/ModbusPDUReadFileRecordResponse.rs | 7 +-
.../src/ModbusPDUReadFileRecordResponseItem.rs | 3 +-
.../src/ModbusPDUReadHoldingRegistersResponse.rs | 3 +-
.../src/ModbusPDUReadInputRegistersResponse.rs | 3 +-
...sPDUReadWriteMultipleHoldingRegistersRequest.rs | 3 +-
...PDUReadWriteMultipleHoldingRegistersResponse.rs | 3 +-
.../plc4x/src/ModbusPDUReportServerIdResponse.rs | 3 +-
.../plc4x/src/ModbusPDUWriteFileRecordRequest.rs | 7 +-
.../src/ModbusPDUWriteFileRecordRequestItem.rs | 3 +-
.../plc4x/src/ModbusPDUWriteFileRecordResponse.rs | 7 +-
.../src/ModbusPDUWriteFileRecordResponseItem.rs | 3 +-
.../src/ModbusPDUWriteMultipleCoilsRequest.rs | 3 +-
...odbusPDUWriteMultipleHoldingRegistersRequest.rs | 3 +-
.../generated-sources/plc4x/src/ModbusTcpADU.rs | 4 +-
.../generated-sources/plc4x/src/S7Payload.rs | 2 +
27 files changed, 157 insertions(+), 51 deletions(-)
diff --git
a/code-generation/language-rust/src/main/java/org/apache/plc4x/language/rust/ExpressionVisitor.java
b/code-generation/language-rust/src/main/java/org/apache/plc4x/language/rust/ExpressionVisitor.java
new file mode 100644
index 0000000000..13ba4223e6
--- /dev/null
+++
b/code-generation/language-rust/src/main/java/org/apache/plc4x/language/rust/ExpressionVisitor.java
@@ -0,0 +1,103 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.plc4x.language.rust;
+
+import
org.apache.plc4x.plugins.codegenerator.language.mspec.model.definitions.DefaultComplexTypeDefinition;
+import
org.apache.plc4x.plugins.codegenerator.language.mspec.model.references.DefaultArrayTypeReference;
+import
org.apache.plc4x.plugins.codegenerator.language.mspec.model.terms.DefaultBinaryTerm;
+import
org.apache.plc4x.plugins.codegenerator.language.mspec.model.terms.DefaultNullLiteral;
+import
org.apache.plc4x.plugins.codegenerator.language.mspec.model.terms.DefaultNumericLiteral;
+import
org.apache.plc4x.plugins.codegenerator.language.mspec.model.terms.DefaultUnaryTerm;
+import
org.apache.plc4x.plugins.codegenerator.language.mspec.model.terms.DefaultVariableLiteral;
+import org.apache.plc4x.plugins.codegenerator.types.fields.Field;
+import org.apache.plc4x.plugins.codegenerator.types.fields.NamedField;
+import org.apache.plc4x.plugins.codegenerator.types.fields.TypedField;
+import
org.apache.plc4x.plugins.codegenerator.types.references.ComplexTypeReference;
+import
org.apache.plc4x.plugins.codegenerator.types.references.SimpleTypeReference;
+import org.apache.plc4x.plugins.codegenerator.types.references.TypeReference;
+import org.apache.plc4x.plugins.codegenerator.types.terms.Term;
+
+import java.util.Optional;
+
+public class ExpressionVisitor {
+
+ private final DefaultComplexTypeDefinition type;
+ private final RustLanguageTemplateHelper helper;
+
+ public ExpressionVisitor(DefaultComplexTypeDefinition type,
RustLanguageTemplateHelper helper) {
+ this.type = type;
+ this.helper = helper;
+ }
+
+ public String[] visitLiteral(DefaultVariableLiteral literal) {
+ switch (literal.getName()) {
+ case "COUNT":
+ return new
String[]{this.visit(literal.getArgs().get().get(0))[0] + ".len()"};
+ case "ARRAY_SIZE_IN_BYTES":
+ String typeName =
literal.getArgs().get().get(0).getDiscriminatorName();
+ // Get the dimension of the given type
+ Optional<Field> any =
this.type.getAllFields().stream().filter(field -> field instanceof
NamedField).filter(field -> typeName.equals(((NamedField)
field).getName())).findAny();
+ if (any.isEmpty()) {
+ throw new RuntimeException("Unable to get type of " +
typeName);
+ }
+ TypeReference type = ((TypedField) any.get()).getType();
+
+ if (!(type instanceof DefaultArrayTypeReference)) {
+ throw new RuntimeException("This should not happen!");
+ }
+ TypeReference innerType = ((DefaultArrayTypeReference)
type).getElementTypeReference();
+ if (innerType instanceof SimpleTypeReference) {
+ String numBits =
Integer.toString(this.helper.getNumBits(((SimpleTypeReference) innerType)));
+ return new
String[]{this.visit(literal.getArgs().get().get(0))[0] + ".len() * " + numBits};
+ } else if (innerType instanceof ComplexTypeReference) {
+ // sum up all entries
+ return new String[]{"let mut s: u32 = 0;", "for x in &" +
this.visit(literal.getArgs().get().get(0))[0] + " {", "\ts +=
x.get_length_in_bits();", "};", "s"};
+ } else {
+ throw new RuntimeException("This should not happen!");
+ }
+ case "lengthInBytes":
+ return new String[]{"get_length_in_bytes()"};
+ case "lengthInBits":
+ return new String[]{"get_length_in_bits()"};
+ default:
+ if (literal.getChild().isPresent()) {
+ return new String[]{"self." + literal.getName() + "." +
this.visitLiteral(((DefaultVariableLiteral) literal.getChild().get()))[0]};
+ } else {
+ return new String[]{"self." + literal.getName()};
+ }
+ }
+ }
+
+ public String[] visit(Term exp) {
+ if (exp instanceof DefaultUnaryTerm) {
+ return this.visit(((DefaultUnaryTerm) exp).getA());
+ }
+ if (exp instanceof DefaultVariableLiteral) {
+ return this.visitLiteral(((DefaultVariableLiteral) exp));
+ }
+ if (exp instanceof DefaultNumericLiteral) {
+ return new String[]{exp.stringRepresentation()};
+ }
+ if (exp instanceof DefaultBinaryTerm) {
+ return new String[]{this.visit(((DefaultBinaryTerm)
exp).getA())[0] + " " + ((DefaultBinaryTerm) exp).getOperation() + " " +
this.visit(((DefaultBinaryTerm) exp).getB())[0]};
+ }
+ throw new RuntimeException("Not yet implemented in visit: " + exp);
+ }
+}
diff --git
a/code-generation/language-rust/src/main/java/org/apache/plc4x/language/rust/RustLanguageTemplateHelper.java
b/code-generation/language-rust/src/main/java/org/apache/plc4x/language/rust/RustLanguageTemplateHelper.java
index f9398c089f..a1caf0ff09 100644
---
a/code-generation/language-rust/src/main/java/org/apache/plc4x/language/rust/RustLanguageTemplateHelper.java
+++
b/code-generation/language-rust/src/main/java/org/apache/plc4x/language/rust/RustLanguageTemplateHelper.java
@@ -505,6 +505,14 @@ public class RustLanguageTemplateHelper extends
BaseFreemarkerLanguageTemplateHe
throw new RuntimeException("Not implemented yet: " + typeReference);
}
+ public String[] implementImplicit(Field field,
DefaultComplexTypeDefinition type) {
+ if (!(field instanceof DefaultImplicitField)) {
+ throw new RuntimeException("Not supported yet");
+ }
+ ExpressionVisitor visitor = new ExpressionVisitor(type, this);
+ return visitor.visit(((DefaultImplicitField)
field).getSerializeExpression());
+ }
+
public String getLanguageTypeNameForTypeReference(TypeReference
typeReference, boolean allowPrimitive) {
Objects.requireNonNull(typeReference);
if (typeReference instanceof ArrayTypeReference) {
diff --git
a/code-generation/language-rust/src/main/resources/templates/rust/complex-type-template.rs.ftlh
b/code-generation/language-rust/src/main/resources/templates/rust/complex-type-template.rs.ftlh
index ddc51dcb7a..44ea95d744 100644
---
a/code-generation/language-rust/src/main/resources/templates/rust/complex-type-template.rs.ftlh
+++
b/code-generation/language-rust/src/main/resources/templates/rust/complex-type-template.rs.ftlh
@@ -158,8 +158,8 @@ pub struct ${type.name} {
pub ${field.name}:
${helper.getLanguageTypeNameForTypeReference(field.type)}<#sep>,</#sep>
<#elseif field.isArrayField()>
pub ${field.name}:
${helper.getLanguageTypeNameForTypeReference(field.type)}<#sep>,</#sep>
- <#elseif field.isConstField()>
- // Intentionally do nothing
+ <#elseif field.isConstField() || field.isImplicitField()>
+<#-- Intentionally do nothing-->
<#elseif field.isChecksumField()>
pub ${field.name}:
${helper.getLanguageTypeNameForTypeReference(field.type)}<#sep>,</#sep>
<#else>
@@ -172,7 +172,10 @@ impl ${type.name} {
<#list type.fields as field>
<#if field.isImplicitField()>
pub fn ${field.name}(&self) ->
${helper.getLanguageTypeNameForTypeReference(field.type)} {
- 0
+ <#list helper.implementImplicit(field, type) as line>
+ <#if !line_has_next>(</#if>${line}<#if !line_has_next>) as
${helper.getLanguageTypeNameForTypeReference(field.type)}</#if>
+ </#list>
+<#-- ${helper.implementImplicit(field, type)} as
${helper.getLanguageTypeNameForTypeReference(field.type)}-->
}
</#if>
</#list>
diff --git
a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusConstants.rs
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusConstants.rs
index 97db293695..34782cd393 100644
--- a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusConstants.rs
+++ b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusConstants.rs
@@ -30,7 +30,6 @@ pub struct ModbusConstantsOptions {
}
#[derive(PartialEq, Debug, Clone)]
pub struct ModbusConstants {
- // Intentionally do nothing
}
impl ModbusConstants {
diff --git
a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusDeviceInformationObject.rs
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusDeviceInformationObject.rs
index 7e61c46a5a..3cf1536cdf 100644
---
a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusDeviceInformationObject.rs
+++
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusDeviceInformationObject.rs
@@ -31,13 +31,12 @@ pub struct ModbusDeviceInformationObjectOptions {
#[derive(PartialEq, Debug, Clone)]
pub struct ModbusDeviceInformationObject {
pub objectId: u8,
- // ->
DefaultImplicitField{serializeExpression=DefaultVariableLiteral{name='COUNT',
typeReference='null', args=[DefaultVariableLiteral{name='data',
typeReference='null', args=null, index=null, child=null}], index=null,
child=null}} DefaultTypedNamedField{name='objectLength'}
DefaultTypedField{type=AbstractSimpleTypeReference{baseType=UINT,
sizeInBits=8}} DefaultField{attributes={}}
pub data: Vec<u8>
}
impl ModbusDeviceInformationObject {
pub fn objectLength(&self) -> u8 {
- 0
+ (self.data.len()) as u8
}
}
diff --git
a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUGetComEventLogResponse.rs
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUGetComEventLogResponse.rs
index 716345e83d..efd6079180 100644
---
a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUGetComEventLogResponse.rs
+++
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUGetComEventLogResponse.rs
@@ -31,7 +31,6 @@ pub struct ModbusPDUGetComEventLogResponseOptions {
}
#[derive(PartialEq, Debug, Clone)]
pub struct ModbusPDUGetComEventLogResponse {
- // ->
DefaultImplicitField{serializeExpression=DefaultBinaryTerm{a=DefaultVariableLiteral{name='COUNT',
typeReference='null', args=[DefaultVariableLiteral{name='events',
typeReference='null', args=null, index=null, child=null}], index=null,
child=null}, b=DefaultNumericLiteral{number=6}, operation='+'}}
DefaultTypedNamedField{name='byteCount'}
DefaultTypedField{type=AbstractSimpleTypeReference{baseType=UINT,
sizeInBits=8}} DefaultField{attributes={}}
pub status: u16,
pub eventCount: u16,
pub messageCount: u16,
@@ -40,7 +39,7 @@ pub struct ModbusPDUGetComEventLogResponse {
impl ModbusPDUGetComEventLogResponse {
pub fn byteCount(&self) -> u8 {
- 0
+ (self.events.len() + 6) as u8
}
}
diff --git
a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadCoilsResponse.rs
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadCoilsResponse.rs
index 1b68c91d73..ad7099c5f1 100644
---
a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadCoilsResponse.rs
+++
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadCoilsResponse.rs
@@ -31,13 +31,12 @@ pub struct ModbusPDUReadCoilsResponseOptions {
}
#[derive(PartialEq, Debug, Clone)]
pub struct ModbusPDUReadCoilsResponse {
- // ->
DefaultImplicitField{serializeExpression=DefaultVariableLiteral{name='COUNT',
typeReference='null', args=[DefaultVariableLiteral{name='value',
typeReference='null', args=null, index=null, child=null}], index=null,
child=null}} DefaultTypedNamedField{name='byteCount'}
DefaultTypedField{type=AbstractSimpleTypeReference{baseType=UINT,
sizeInBits=8}} DefaultField{attributes={}}
pub value: Vec<u8>
}
impl ModbusPDUReadCoilsResponse {
pub fn byteCount(&self) -> u8 {
- 0
+ (self.value.len()) as u8
}
}
diff --git
a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadDeviceIdentificationRequest.rs
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadDeviceIdentificationRequest.rs
index 59c2b24852..9cee6a31ee 100644
---
a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadDeviceIdentificationRequest.rs
+++
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadDeviceIdentificationRequest.rs
@@ -32,7 +32,6 @@ pub struct ModbusPDUReadDeviceIdentificationRequestOptions {
}
#[derive(PartialEq, Debug, Clone)]
pub struct ModbusPDUReadDeviceIdentificationRequest {
- // Intentionally do nothing
pub level: ModbusDeviceInformationLevel,
pub objectId: u8
}
diff --git
a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadDeviceIdentificationResponse.rs
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadDeviceIdentificationResponse.rs
index 03db7b7608..78d50b970a 100644
---
a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadDeviceIdentificationResponse.rs
+++
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadDeviceIdentificationResponse.rs
@@ -36,19 +36,17 @@ pub struct ModbusPDUReadDeviceIdentificationResponseOptions
{
}
#[derive(PartialEq, Debug, Clone)]
pub struct ModbusPDUReadDeviceIdentificationResponse {
- // Intentionally do nothing
pub level: ModbusDeviceInformationLevel,
pub individualAccess: bool,
pub conformityLevel: ModbusDeviceInformationConformityLevel,
pub moreFollows: ModbusDeviceInformationMoreFollows,
pub nextObjectId: u8,
- // ->
DefaultImplicitField{serializeExpression=DefaultVariableLiteral{name='COUNT',
typeReference='null', args=[DefaultVariableLiteral{name='objects',
typeReference='null', args=null, index=null, child=null}], index=null,
child=null}} DefaultTypedNamedField{name='numberOfObjects'}
DefaultTypedField{type=AbstractSimpleTypeReference{baseType=UINT,
sizeInBits=8}} DefaultField{attributes={}}
pub objects: Vec<ModbusDeviceInformationObject>
}
impl ModbusPDUReadDeviceIdentificationResponse {
pub fn numberOfObjects(&self) -> u8 {
- 0
+ (self.objects.len()) as u8
}
}
diff --git
a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadDiscreteInputsResponse.rs
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadDiscreteInputsResponse.rs
index dc51cc0cbd..70f0b6904c 100644
---
a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadDiscreteInputsResponse.rs
+++
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadDiscreteInputsResponse.rs
@@ -31,13 +31,12 @@ pub struct ModbusPDUReadDiscreteInputsResponseOptions {
}
#[derive(PartialEq, Debug, Clone)]
pub struct ModbusPDUReadDiscreteInputsResponse {
- // ->
DefaultImplicitField{serializeExpression=DefaultVariableLiteral{name='COUNT',
typeReference='null', args=[DefaultVariableLiteral{name='value',
typeReference='null', args=null, index=null, child=null}], index=null,
child=null}} DefaultTypedNamedField{name='byteCount'}
DefaultTypedField{type=AbstractSimpleTypeReference{baseType=UINT,
sizeInBits=8}} DefaultField{attributes={}}
pub value: Vec<u8>
}
impl ModbusPDUReadDiscreteInputsResponse {
pub fn byteCount(&self) -> u8 {
- 0
+ (self.value.len()) as u8
}
}
diff --git
a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadFifoQueueResponse.rs
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadFifoQueueResponse.rs
index b1aa19b6e1..1ee22779c2 100644
---
a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadFifoQueueResponse.rs
+++
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadFifoQueueResponse.rs
@@ -31,17 +31,15 @@ pub struct ModbusPDUReadFifoQueueResponseOptions {
}
#[derive(PartialEq, Debug, Clone)]
pub struct ModbusPDUReadFifoQueueResponse {
- // ->
DefaultImplicitField{serializeExpression=DefaultBinaryTerm{a=DefaultUnaryTerm{a=DefaultBinaryTerm{a=DefaultVariableLiteral{name='COUNT',
typeReference='null', args=[DefaultVariableLiteral{name='fifoValue',
typeReference='null', args=null, index=null, child=null}], index=null,
child=null}, b=DefaultNumericLiteral{number=2}, operation='*'},
operation='()'}, b=DefaultNumericLiteral{number=2}, operation='+'}}
DefaultTypedNamedField{name='byteCount'} DefaultTypedField{type=Abstr [...]
- // ->
DefaultImplicitField{serializeExpression=DefaultBinaryTerm{a=DefaultUnaryTerm{a=DefaultBinaryTerm{a=DefaultVariableLiteral{name='COUNT',
typeReference='null', args=[DefaultVariableLiteral{name='fifoValue',
typeReference='null', args=null, index=null, child=null}], index=null,
child=null}, b=DefaultNumericLiteral{number=2}, operation='*'},
operation='()'}, b=DefaultNumericLiteral{number=2}, operation='/'}}
DefaultTypedNamedField{name='fifoCount'} DefaultTypedField{type=Abstr [...]
pub fifoValue: Vec<u16>
}
impl ModbusPDUReadFifoQueueResponse {
pub fn byteCount(&self) -> u16 {
- 0
+ (self.fifoValue.len() * 2 + 2) as u16
}
pub fn fifoCount(&self) -> u16 {
- 0
+ (self.fifoValue.len() * 2 / 2) as u16
}
}
diff --git
a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadFileRecordRequest.rs
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadFileRecordRequest.rs
index 5848f30098..0415f3be37 100644
---
a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadFileRecordRequest.rs
+++
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadFileRecordRequest.rs
@@ -33,13 +33,16 @@ pub struct ModbusPDUReadFileRecordRequestOptions {
}
#[derive(PartialEq, Debug, Clone)]
pub struct ModbusPDUReadFileRecordRequest {
- // ->
DefaultImplicitField{serializeExpression=DefaultVariableLiteral{name='ARRAY_SIZE_IN_BYTES',
typeReference='null', args=[DefaultVariableLiteral{name='items',
typeReference='null', args=null, index=null, child=null}], index=null,
child=null}} DefaultTypedNamedField{name='byteCount'}
DefaultTypedField{type=AbstractSimpleTypeReference{baseType=UINT,
sizeInBits=8}} DefaultField{attributes={}}
pub items: Vec<ModbusPDUReadFileRecordRequestItem>
}
impl ModbusPDUReadFileRecordRequest {
pub fn byteCount(&self) -> u8 {
- 0
+ let mut s: u32 = 0;
+ for x in &self.items {
+ s += x.get_length_in_bits();
+ };
+ (s) as u8
}
}
diff --git
a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadFileRecordResponse.rs
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadFileRecordResponse.rs
index 4d583a30b1..4d4310b15e 100644
---
a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadFileRecordResponse.rs
+++
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadFileRecordResponse.rs
@@ -33,13 +33,16 @@ pub struct ModbusPDUReadFileRecordResponseOptions {
}
#[derive(PartialEq, Debug, Clone)]
pub struct ModbusPDUReadFileRecordResponse {
- // ->
DefaultImplicitField{serializeExpression=DefaultVariableLiteral{name='ARRAY_SIZE_IN_BYTES',
typeReference='null', args=[DefaultVariableLiteral{name='items',
typeReference='null', args=null, index=null, child=null}], index=null,
child=null}} DefaultTypedNamedField{name='byteCount'}
DefaultTypedField{type=AbstractSimpleTypeReference{baseType=UINT,
sizeInBits=8}} DefaultField{attributes={}}
pub items: Vec<ModbusPDUReadFileRecordResponseItem>
}
impl ModbusPDUReadFileRecordResponse {
pub fn byteCount(&self) -> u8 {
- 0
+ let mut s: u32 = 0;
+ for x in &self.items {
+ s += x.get_length_in_bits();
+ };
+ (s) as u8
}
}
diff --git
a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadFileRecordResponseItem.rs
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadFileRecordResponseItem.rs
index d41ba7168c..4061d68023 100644
---
a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadFileRecordResponseItem.rs
+++
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadFileRecordResponseItem.rs
@@ -30,14 +30,13 @@ pub struct ModbusPDUReadFileRecordResponseItemOptions {
}
#[derive(PartialEq, Debug, Clone)]
pub struct ModbusPDUReadFileRecordResponseItem {
- // ->
DefaultImplicitField{serializeExpression=DefaultBinaryTerm{a=DefaultVariableLiteral{name='COUNT',
typeReference='null', args=[DefaultVariableLiteral{name='data',
typeReference='null', args=null, index=null, child=null}], index=null,
child=null}, b=DefaultNumericLiteral{number=1}, operation='+'}}
DefaultTypedNamedField{name='dataLength'}
DefaultTypedField{type=AbstractSimpleTypeReference{baseType=UINT,
sizeInBits=8}} DefaultField{attributes={}}
pub referenceType: u8,
pub data: Vec<u8>
}
impl ModbusPDUReadFileRecordResponseItem {
pub fn dataLength(&self) -> u8 {
- 0
+ (self.data.len() + 1) as u8
}
}
diff --git
a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadHoldingRegistersResponse.rs
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadHoldingRegistersResponse.rs
index 83c3c2baf8..e5e8b4e7a4 100644
---
a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadHoldingRegistersResponse.rs
+++
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadHoldingRegistersResponse.rs
@@ -31,13 +31,12 @@ pub struct ModbusPDUReadHoldingRegistersResponseOptions {
}
#[derive(PartialEq, Debug, Clone)]
pub struct ModbusPDUReadHoldingRegistersResponse {
- // ->
DefaultImplicitField{serializeExpression=DefaultVariableLiteral{name='COUNT',
typeReference='null', args=[DefaultVariableLiteral{name='value',
typeReference='null', args=null, index=null, child=null}], index=null,
child=null}} DefaultTypedNamedField{name='byteCount'}
DefaultTypedField{type=AbstractSimpleTypeReference{baseType=UINT,
sizeInBits=8}} DefaultField{attributes={}}
pub value: Vec<u8>
}
impl ModbusPDUReadHoldingRegistersResponse {
pub fn byteCount(&self) -> u8 {
- 0
+ (self.value.len()) as u8
}
}
diff --git
a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadInputRegistersResponse.rs
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadInputRegistersResponse.rs
index 34dcac2699..853d73ecb6 100644
---
a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadInputRegistersResponse.rs
+++
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadInputRegistersResponse.rs
@@ -31,13 +31,12 @@ pub struct ModbusPDUReadInputRegistersResponseOptions {
}
#[derive(PartialEq, Debug, Clone)]
pub struct ModbusPDUReadInputRegistersResponse {
- // ->
DefaultImplicitField{serializeExpression=DefaultVariableLiteral{name='COUNT',
typeReference='null', args=[DefaultVariableLiteral{name='value',
typeReference='null', args=null, index=null, child=null}], index=null,
child=null}} DefaultTypedNamedField{name='byteCount'}
DefaultTypedField{type=AbstractSimpleTypeReference{baseType=UINT,
sizeInBits=8}} DefaultField{attributes={}}
pub value: Vec<u8>
}
impl ModbusPDUReadInputRegistersResponse {
pub fn byteCount(&self) -> u8 {
- 0
+ (self.value.len()) as u8
}
}
diff --git
a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadWriteMultipleHoldingRegistersRequest.rs
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadWriteMultipleHoldingRegistersRequest.rs
index 098efcefce..498afdb948 100644
---
a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadWriteMultipleHoldingRegistersRequest.rs
+++
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadWriteMultipleHoldingRegistersRequest.rs
@@ -35,13 +35,12 @@ pub struct
ModbusPDUReadWriteMultipleHoldingRegistersRequest {
pub readQuantity: u16,
pub writeStartingAddress: u16,
pub writeQuantity: u16,
- // ->
DefaultImplicitField{serializeExpression=DefaultVariableLiteral{name='COUNT',
typeReference='null', args=[DefaultVariableLiteral{name='value',
typeReference='null', args=null, index=null, child=null}], index=null,
child=null}} DefaultTypedNamedField{name='byteCount'}
DefaultTypedField{type=AbstractSimpleTypeReference{baseType=UINT,
sizeInBits=8}} DefaultField{attributes={}}
pub value: Vec<u8>
}
impl ModbusPDUReadWriteMultipleHoldingRegistersRequest {
pub fn byteCount(&self) -> u8 {
- 0
+ (self.value.len()) as u8
}
}
diff --git
a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadWriteMultipleHoldingRegistersResponse.rs
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadWriteMultipleHoldingRegistersResponse.rs
index 4d946804a3..cc110457bf 100644
---
a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadWriteMultipleHoldingRegistersResponse.rs
+++
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReadWriteMultipleHoldingRegistersResponse.rs
@@ -31,13 +31,12 @@ pub struct
ModbusPDUReadWriteMultipleHoldingRegistersResponseOptions {
}
#[derive(PartialEq, Debug, Clone)]
pub struct ModbusPDUReadWriteMultipleHoldingRegistersResponse {
- // ->
DefaultImplicitField{serializeExpression=DefaultVariableLiteral{name='COUNT',
typeReference='null', args=[DefaultVariableLiteral{name='value',
typeReference='null', args=null, index=null, child=null}], index=null,
child=null}} DefaultTypedNamedField{name='byteCount'}
DefaultTypedField{type=AbstractSimpleTypeReference{baseType=UINT,
sizeInBits=8}} DefaultField{attributes={}}
pub value: Vec<u8>
}
impl ModbusPDUReadWriteMultipleHoldingRegistersResponse {
pub fn byteCount(&self) -> u8 {
- 0
+ (self.value.len()) as u8
}
}
diff --git
a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReportServerIdResponse.rs
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReportServerIdResponse.rs
index 2cc269cc36..f10f7f2b34 100644
---
a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReportServerIdResponse.rs
+++
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUReportServerIdResponse.rs
@@ -31,13 +31,12 @@ pub struct ModbusPDUReportServerIdResponseOptions {
}
#[derive(PartialEq, Debug, Clone)]
pub struct ModbusPDUReportServerIdResponse {
- // ->
DefaultImplicitField{serializeExpression=DefaultVariableLiteral{name='COUNT',
typeReference='null', args=[DefaultVariableLiteral{name='value',
typeReference='null', args=null, index=null, child=null}], index=null,
child=null}} DefaultTypedNamedField{name='byteCount'}
DefaultTypedField{type=AbstractSimpleTypeReference{baseType=UINT,
sizeInBits=8}} DefaultField{attributes={}}
pub value: Vec<u8>
}
impl ModbusPDUReportServerIdResponse {
pub fn byteCount(&self) -> u8 {
- 0
+ (self.value.len()) as u8
}
}
diff --git
a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUWriteFileRecordRequest.rs
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUWriteFileRecordRequest.rs
index b3fbe6e03c..98eeb6face 100644
---
a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUWriteFileRecordRequest.rs
+++
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUWriteFileRecordRequest.rs
@@ -33,13 +33,16 @@ pub struct ModbusPDUWriteFileRecordRequestOptions {
}
#[derive(PartialEq, Debug, Clone)]
pub struct ModbusPDUWriteFileRecordRequest {
- // ->
DefaultImplicitField{serializeExpression=DefaultVariableLiteral{name='ARRAY_SIZE_IN_BYTES',
typeReference='null', args=[DefaultVariableLiteral{name='items',
typeReference='null', args=null, index=null, child=null}], index=null,
child=null}} DefaultTypedNamedField{name='byteCount'}
DefaultTypedField{type=AbstractSimpleTypeReference{baseType=UINT,
sizeInBits=8}} DefaultField{attributes={}}
pub items: Vec<ModbusPDUWriteFileRecordRequestItem>
}
impl ModbusPDUWriteFileRecordRequest {
pub fn byteCount(&self) -> u8 {
- 0
+ let mut s: u32 = 0;
+ for x in &self.items {
+ s += x.get_length_in_bits();
+ };
+ (s) as u8
}
}
diff --git
a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUWriteFileRecordRequestItem.rs
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUWriteFileRecordRequestItem.rs
index 4ff9ca7007..12e92e3931 100644
---
a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUWriteFileRecordRequestItem.rs
+++
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUWriteFileRecordRequestItem.rs
@@ -33,13 +33,12 @@ pub struct ModbusPDUWriteFileRecordRequestItem {
pub referenceType: u8,
pub fileNumber: u16,
pub recordNumber: u16,
- // ->
DefaultImplicitField{serializeExpression=DefaultBinaryTerm{a=DefaultVariableLiteral{name='COUNT',
typeReference='null', args=[DefaultVariableLiteral{name='recordData',
typeReference='null', args=null, index=null, child=null}], index=null,
child=null}, b=DefaultNumericLiteral{number=2}, operation='/'}}
DefaultTypedNamedField{name='recordLength'}
DefaultTypedField{type=AbstractSimpleTypeReference{baseType=UINT,
sizeInBits=16}} DefaultField{attributes={}}
pub recordData: Vec<u8>
}
impl ModbusPDUWriteFileRecordRequestItem {
pub fn recordLength(&self) -> u16 {
- 0
+ (self.recordData.len() / 2) as u16
}
}
diff --git
a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUWriteFileRecordResponse.rs
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUWriteFileRecordResponse.rs
index 1a91ee9d5a..702e66323f 100644
---
a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUWriteFileRecordResponse.rs
+++
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUWriteFileRecordResponse.rs
@@ -33,13 +33,16 @@ pub struct ModbusPDUWriteFileRecordResponseOptions {
}
#[derive(PartialEq, Debug, Clone)]
pub struct ModbusPDUWriteFileRecordResponse {
- // ->
DefaultImplicitField{serializeExpression=DefaultVariableLiteral{name='ARRAY_SIZE_IN_BYTES',
typeReference='null', args=[DefaultVariableLiteral{name='items',
typeReference='null', args=null, index=null, child=null}], index=null,
child=null}} DefaultTypedNamedField{name='byteCount'}
DefaultTypedField{type=AbstractSimpleTypeReference{baseType=UINT,
sizeInBits=8}} DefaultField{attributes={}}
pub items: Vec<ModbusPDUWriteFileRecordResponseItem>
}
impl ModbusPDUWriteFileRecordResponse {
pub fn byteCount(&self) -> u8 {
- 0
+ let mut s: u32 = 0;
+ for x in &self.items {
+ s += x.get_length_in_bits();
+ };
+ (s) as u8
}
}
diff --git
a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUWriteFileRecordResponseItem.rs
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUWriteFileRecordResponseItem.rs
index 9fe789f227..8f5fc38650 100644
---
a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUWriteFileRecordResponseItem.rs
+++
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUWriteFileRecordResponseItem.rs
@@ -33,13 +33,12 @@ pub struct ModbusPDUWriteFileRecordResponseItem {
pub referenceType: u8,
pub fileNumber: u16,
pub recordNumber: u16,
- // ->
DefaultImplicitField{serializeExpression=DefaultBinaryTerm{a=DefaultVariableLiteral{name='COUNT',
typeReference='null', args=[DefaultVariableLiteral{name='recordData',
typeReference='null', args=null, index=null, child=null}], index=null,
child=null}, b=DefaultNumericLiteral{number=2}, operation='/'}}
DefaultTypedNamedField{name='recordLength'}
DefaultTypedField{type=AbstractSimpleTypeReference{baseType=UINT,
sizeInBits=16}} DefaultField{attributes={}}
pub recordData: Vec<u8>
}
impl ModbusPDUWriteFileRecordResponseItem {
pub fn recordLength(&self) -> u16 {
- 0
+ (self.recordData.len() / 2) as u16
}
}
diff --git
a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUWriteMultipleCoilsRequest.rs
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUWriteMultipleCoilsRequest.rs
index 4f0cdbfe7b..9c9c2a12a8 100644
---
a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUWriteMultipleCoilsRequest.rs
+++
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUWriteMultipleCoilsRequest.rs
@@ -33,13 +33,12 @@ pub struct ModbusPDUWriteMultipleCoilsRequestOptions {
pub struct ModbusPDUWriteMultipleCoilsRequest {
pub startingAddress: u16,
pub quantity: u16,
- // ->
DefaultImplicitField{serializeExpression=DefaultVariableLiteral{name='COUNT',
typeReference='null', args=[DefaultVariableLiteral{name='value',
typeReference='null', args=null, index=null, child=null}], index=null,
child=null}} DefaultTypedNamedField{name='byteCount'}
DefaultTypedField{type=AbstractSimpleTypeReference{baseType=UINT,
sizeInBits=8}} DefaultField{attributes={}}
pub value: Vec<u8>
}
impl ModbusPDUWriteMultipleCoilsRequest {
pub fn byteCount(&self) -> u8 {
- 0
+ (self.value.len()) as u8
}
}
diff --git
a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUWriteMultipleHoldingRegistersRequest.rs
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUWriteMultipleHoldingRegistersRequest.rs
index c1918a64f1..1c57393db9 100644
---
a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUWriteMultipleHoldingRegistersRequest.rs
+++
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusPDUWriteMultipleHoldingRegistersRequest.rs
@@ -33,13 +33,12 @@ pub struct
ModbusPDUWriteMultipleHoldingRegistersRequestOptions {
pub struct ModbusPDUWriteMultipleHoldingRegistersRequest {
pub startingAddress: u16,
pub quantity: u16,
- // ->
DefaultImplicitField{serializeExpression=DefaultVariableLiteral{name='COUNT',
typeReference='null', args=[DefaultVariableLiteral{name='value',
typeReference='null', args=null, index=null, child=null}], index=null,
child=null}} DefaultTypedNamedField{name='byteCount'}
DefaultTypedField{type=AbstractSimpleTypeReference{baseType=UINT,
sizeInBits=8}} DefaultField{attributes={}}
pub value: Vec<u8>
}
impl ModbusPDUWriteMultipleHoldingRegistersRequest {
pub fn byteCount(&self) -> u8 {
- 0
+ (self.value.len()) as u8
}
}
diff --git a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusTcpADU.rs
b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusTcpADU.rs
index d6d9837e40..5ff7d7b5f8 100644
--- a/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusTcpADU.rs
+++ b/plc4rust/modbus/target/generated-sources/plc4x/src/ModbusTcpADU.rs
@@ -36,15 +36,13 @@ pub struct ModbusTcpADUOptions {
#[derive(PartialEq, Debug, Clone)]
pub struct ModbusTcpADU {
pub transactionIdentifier: u16,
- // Intentionally do nothing
- // ->
DefaultImplicitField{serializeExpression=DefaultBinaryTerm{a=DefaultVariableLiteral{name='pdu',
typeReference='null', args=null, index=null,
child=DefaultVariableLiteral{name='lengthInBytes', typeReference='null',
args=null, index=null, child=null}}, b=DefaultNumericLiteral{number=1},
operation='+'}} DefaultTypedNamedField{name='length'}
DefaultTypedField{type=AbstractSimpleTypeReference{baseType=UINT,
sizeInBits=16}} DefaultField{attributes={byteOrder=DefaultVariableLitera [...]
pub unitIdentifier: u8,
pub pdu: ModbusPDU
}
impl ModbusTcpADU {
pub fn length(&self) -> u16 {
- 0
+ (self.pdu.get_length_in_bytes() + 1) as u16
}
}
diff --git a/plc4rust/s7/target/generated-sources/plc4x/src/S7Payload.rs
b/plc4rust/s7/target/generated-sources/plc4x/src/S7Payload.rs
index a6c92e6280..4887f3b4f3 100644
--- a/plc4rust/s7/target/generated-sources/plc4x/src/S7Payload.rs
+++ b/plc4rust/s7/target/generated-sources/plc4x/src/S7Payload.rs
@@ -55,6 +55,8 @@ impl Message for S7Payload {
}
fn serialize<T: Write>(&self, writer: &mut WriteBuffer<T>) ->
Result<usize, Error> {
+ let a = vec![];
+ a.len()
match self {
S7Payload::S7PayloadReadVarResponse(msg) => {
msg.serialize(writer)