Skip to content

Commit

Permalink
feat(bacnet): support for life support zones
Browse files Browse the repository at this point in the history
  • Loading branch information
sruehl committed Jan 13, 2022
1 parent 335a35f commit 0806f51
Show file tree
Hide file tree
Showing 307 changed files with 1,538 additions and 1,158 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ public String getNullValueForTypeReference(TypeReference typeReference) {
case VSTRING:
return "\"\"";
}
} else if (typeReference instanceof ComplexTypeReference) {
} else if (typeReference instanceof ComplexTypeReference && isEnumTypeReference(typeReference)) {
return "0";
}
return "nil";
Expand Down Expand Up @@ -890,6 +890,7 @@ private String toStaticCallVariableExpression(Field field, TypeReference typeRef
sb.append(", ");
}
if (arg instanceof VariableLiteral) {
tracer = tracer.dive("VariableLiteral");
VariableLiteral va = (VariableLiteral) arg;
// "io" is the default name of the reader argument which is always available.
boolean isParserArg = "readBuffer".equals(va.getName()) || "writeBuffer".equals(va.getName()) || ((thisType instanceof DataIoTypeDefinition) && "_value".equals(va.getName()));
Expand Down Expand Up @@ -933,7 +934,16 @@ else if (isTypeArg) {
sb.append(toVariableExpression(field, typeReference, va, parserArguments, serializerArguments, serialize, suppressPointerAccess));
}
} else if (arg instanceof StringLiteral) {
tracer = tracer.dive("StringLiteral");
sb.append(((StringLiteral) arg).getValue());
} else if (arg instanceof BooleanLiteral) {
tracer = tracer.dive("BooleanLiteral");
sb.append(((BooleanLiteral) arg).getValue());
} else if (arg instanceof BinaryTerm) {
tracer = tracer.dive("BinaryTerm");
sb.append(toBinaryTermExpression(field, typeReference,(BinaryTerm) arg, parserArguments,serializerArguments,serialize,tracer));
} else {
throw new RuntimeException(arg.getClass().getName());
}
}
sb.append(")");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,8 @@ type I${type.name} interface {
<#list helper.getDiscriminatorTypes() as discriminatorName, discriminatorType>
<#-- If the discriminator name matches that of another field, suppress the methods generation -->
<#if !type.isNonDiscriminatorField(discriminatorName)>
${discriminatorName?cap_first}() ${helper.getLanguageTypeNameForTypeReference(helper.getDiscriminatorTypes()[discriminatorName])}
<#assign typeRef=helper.getDiscriminatorTypes()[discriminatorName]>
${discriminatorName?cap_first}() <#if typeRef.isComplexTypeReference() && !helper.isEnumTypeReference(typeRef)>I</#if>${helper.getLanguageTypeNameForTypeReference(typeRef)}
</#if>
</#list>
</#if>
Expand All @@ -124,27 +125,28 @@ type I${type.name} interface {
<#list discriminatedChildType.getDiscriminatorMap() as discriminatorName, discriminatorTerm>
<#-- If the discriminator name matches that of another field, suppress the methods generation -->
<#if !type.isNonDiscriminatorField(discriminatorName)>
func (m *${type.name}) ${discriminatorName?cap_first}() ${helper.getLanguageTypeNameForTypeReference(helper.getDiscriminatorTypes()[discriminatorName])} {
<#assign typeRef=helper.getDiscriminatorTypes()[discriminatorName]>
func (m *${type.name}) ${discriminatorName?cap_first}() <#if typeRef.isComplexTypeReference() && !helper.isEnumTypeReference(typeRef)>I</#if>${helper.getLanguageTypeNameForTypeReference(typeRef)} {
<@compress single_line=true>
return
<#if discriminatorTerm??>
<#if helper.isComplexTypeReference(helper.getDiscriminatorTypes()[discriminatorName])>
<#if helper.isEnumTypeReference(helper.getDiscriminatorTypes()[discriminatorName])>
<#assign enumType=helper.getLanguageTypeNameForTypeReference(helper.getDiscriminatorTypes()[discriminatorName])>
<#if helper.isComplexTypeReference(typeRef)>
<#if helper.isEnumTypeReference(typeRef)>
<#assign enumType=helper.getLanguageTypeNameForTypeReference(typeRef)>
<#assign enumTypeWithoutTraces=tracer.removeTraces(enumType)>
<#assign enumTypeTraces=tracer.extractTraces(enumType)>
<#assign enumValue=helper.toParseExpression(null, helper.getDiscriminatorTypes()[discriminatorName], discriminatorTerm, parserArguments)>
<#assign enumValue=helper.toParseExpression(null, typeRef, discriminatorTerm, parserArguments)>
<#assign enumValueWithoutTraces=tracer.removeTraces(enumValue)>
<#assign enumValueTraces=tracer.extractTraces(enumValue)>
${enumTypeTraces}${enumValueTraces}${enumTypeWithoutTraces}_${enumValueWithoutTraces}
<#else>
${helper.toParseExpression(null, helper.getDiscriminatorTypes()[discriminatorName], discriminatorTerm, parserArguments)}
${helper.toParseExpression(null, typeRef, discriminatorTerm, parserArguments)}
</#if>
<#else>
${helper.toParseExpression(null, helper.getDiscriminatorTypes()[discriminatorName], discriminatorTerm, parserArguments)}
${helper.toParseExpression(null, typeRef, discriminatorTerm, parserArguments)}
</#if>
<#else>
${helper.getNullValueForTypeReference(helper.getDiscriminatorTypes()[discriminatorName])}
${helper.getNullValueForTypeReference(typeRef)}
</#if>
</@compress>
}
Expand All @@ -161,7 +163,27 @@ type I${type.name}Parent interface {

type I${type.name}Child interface {
Serialize(writeBuffer utils.WriteBuffer) error
InitializeParent(parent *${type.name}<#if type.getPropertyFields()?has_content>, <#list type.getPropertyFields() as field>${field.name} <#if field.loopType??>[]</#if><#if helper.needsPointerAccess(field)>*</#if>${helper.getLanguageTypeNameForField(field)}<#sep>, </#sep></#list></#if><#if type.getPropertyFields()?has_content && type.virtualFields?has_content>, </#if><#list type.virtualFields as field>${field.name} <#if field.loopType??>[]</#if><#if helper.needsPointerAccess(field)>*</#if>${helper.getLanguageTypeNameForField(field)}<#sep>, </#sep></#list>)
<@compress single_line=true>
InitializeParent(parent *${type.name}
<#if type.getPropertyFields()?has_content>, </#if>
<#list type.getPropertyFields() as field>
${field.name}
<#if field.loopType??>[]</#if>
<#if helper.needsPointerAccess(field)>*</#if>
${helper.getLanguageTypeNameForField(field)}
<#sep>, </#sep>
</#list>
<#if type.virtualFields?has_content>, </#if>
<#list type.virtualFields as field>
${field.name}
<#if field.loopType??>[]</#if>
<#if helper.needsPointerAccess(field)>*</#if>
${helper.getLanguageTypeNameForField(field)}
<#sep>, </#sep>
</#list>
)
</@compress>

GetTypeName() string
I${type.name}
}
Expand All @@ -175,7 +197,29 @@ func ${type.name}${discriminatorName?cap_first}(m I${type.name}) ${helper.getLan
</#list-->
<#elseif type.parentType??>

func (m *${type.name}) InitializeParent(parent *${type.parentType.name}<#if type.parentType.asComplexTypeDefinition().orElseThrow().allPropertyFields?has_content>, <#list type.parentPropertyFields as parentField>${parentField.name} <#if parentField.loopType??>[]</#if><#if helper.needsPointerAccess(parentField)>*</#if>${helper.getLanguageTypeNameForField(parentField)}<#sep>, </#sep></#list></#if><#if type.parentType.asComplexTypeDefinition().orElseThrow().allPropertyFields?has_content && type.parentType.asComplexTypeDefinition().orElseThrow().virtualFields?has_content>, </#if><#list type.parentType.asComplexTypeDefinition().orElseThrow().virtualFields as parentField>${parentField.name} <#if parentField.loopType??>[]</#if><#if helper.needsPointerAccess(parentField)>*</#if>${helper.getLanguageTypeNameForField(parentField)}<#sep>, </#sep></#list>) {
<@compress single_line=true>
func (m *${type.name}) InitializeParent(parent *${type.parentType.name}
<#assign parentTypeHasPropertyFields=type.parentType.asComplexTypeDefinition().orElseThrow().allPropertyFields?has_content>
<#if parentTypeHasPropertyFields>, </#if>
<#list type.parentPropertyFields as parentField>
${parentField.name}
<#if parentField.loopType??>[]</#if>
<#if helper.needsPointerAccess(parentField)>*</#if>
${helper.getLanguageTypeNameForField(parentField)}
<#sep>, </#sep>
</#list>
<#assign parentTypeHasVritualFields=type.parentType.asComplexTypeDefinition().orElseThrow().virtualFields?has_content>
<#if parentTypeHasVritualFields>, </#if>
<#list type.parentType.asComplexTypeDefinition().orElseThrow().virtualFields as parentField>
${parentField.name}
<#if parentField.loopType??>[]</#if>
<#if helper.needsPointerAccess(parentField)>*</#if>
${helper.getLanguageTypeNameForField(parentField)}
<#sep>, </#sep>
</#list>
)
{
</@compress>
<#list type.parentType.asComplexTypeDefinition().orElseThrow().allPropertyFields as field>
m.${field.name?cap_first} = ${field.name}
</#list>
Expand Down Expand Up @@ -680,11 +724,32 @@ func ${type.name}Parse(readBuffer utils.ReadBuffer<#if hasParserArguments>, ${pa
${arrayField.name} := make([]<#if helper.needsPointerAccess(arrayField)>*</#if>${helper.getLanguageTypeNameForField(field)}, 0)
{
for ;!bool(${helper.toParseExpression(arrayField, helper.boolTypeReference, arrayField.loopExpression, parserArguments)}); {
_item, _err := <#if helper.isSimpleTypeReference(arrayField.type)>${helper.getReadBufferReadMethodCall("", arrayField.type.asSimpleTypeReference().orElseThrow(), arrayField)}<#else>${arrayField.type.asComplexTypeReference().orElseThrow().name}Parse(readBuffer<#if arrayField.type.asComplexTypeReference().orElseThrow().params.isPresent()>, <#list arrayField.type.asComplexTypeReference().orElseThrow().params.orElseThrow() as parserArgument><#if <#--TODO: here DF1ResponseMessage throws a payloadLength not present: meaning that some feature is not rightfully implemented as the result should be a error not a missing pointer-->type.getPropertyFieldFromThisOrParentByName(parserArgument.name).isPresent() && helper.needsPointerAccess(type.getPropertyFieldFromThisOrParentByName(parserArgument.name).orElseThrow())>*</#if>${helper.toTypedParseExpression(arrayField, helper.getArgumentType(arrayField.type, parserArgument?index), parserArgument, parserArguments)}<#sep>, </#sep></#list></#if>)</#if>
<@compress single_line=true>
_item, _err :=
<#if helper.isSimpleTypeReference(arrayField.type)>
${helper.getReadBufferReadMethodCall("", arrayField.type.asSimpleTypeReference().orElseThrow(), arrayField)}
<#else>
${arrayField.type.asComplexTypeReference().orElseThrow().name}Parse(readBuffer
<#if arrayField.type.asComplexTypeReference().orElseThrow().params.isPresent()>
,
<#list arrayField.type.asComplexTypeReference().orElseThrow().params.orElseThrow() as parserArgument>
<#if <#--TODO: here DF1ResponseMessage throws a payloadLength not present: meaning that some feature is not rightfully implemented as the result should be a error not a missing pointer-->type.getPropertyFieldFromThisOrParentByName(parserArgument.name).isPresent() && helper.needsPointerAccess(type.getPropertyFieldFromThisOrParentByName(parserArgument.name).orElseThrow())>*</#if>
${helper.toTypedParseExpression(arrayField, helper.getArgumentType(arrayField.type, parserArgument?index), parserArgument, parserArguments)}
<#sep>, </#sep>
</#list>
</#if>
)
</#if>
</@compress>

if _err != nil {
return nil, errors.Wrap(_err, "Error parsing '${arrayField.name}' field")<@emitImport import="github.com/pkg/errors" />
}
<#if helper.isSimpleTypeReference(arrayField.type)>
${arrayField.name} = append(${arrayField.name}, _item)
<#else>
${arrayField.name} = append(${arrayField.name}, Cast${arrayField.type.asComplexTypeReference().orElseThrow().name}(_item))
</#if>

<#-- After parsing, update the current position, but only if it's needed -->
<#if arrayField.loopExpression.contains("curPos")>
Expand Down Expand Up @@ -1206,7 +1271,21 @@ func ${type.name}Parse(readBuffer utils.ReadBuffer<#if hasParserArguments>, ${pa

<#if type.isDiscriminatedParentTypeDefinition()>
// Finish initializing
_parent.Child.InitializeParent(_parent<#if type.propertyFields?has_content>, <#list type.propertyFields as field>${field.name}<#sep>, </#sep></#list></#if><#if type.propertyFields?has_content && type.virtualFields?has_content>, </#if><#list type.virtualFields as field>${field.name}<#sep>, </#sep></#list>)
<@compress single_line=true>
_parent.Child.InitializeParent(_parent
<#if type.propertyFields?has_content>, </#if>
<#list type.propertyFields as field>
${field.name}
<#sep>, </#sep>
</#list>
<#if type.virtualFields?has_content>, </#if>
<#list type.virtualFields as field>
${field.name}
<#sep>, </#sep>
</#list>
)
</@compress>

return _parent, nil
<#elseif type.parentType?has_content>
// Create a partially initialized instance
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 17 additions & 0 deletions plc4go/internal/plc4go/ads/fieldtype_string.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 1 addition & 2 deletions plc4go/internal/plc4go/ads/readwrite/model/AdsReadRequest.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 0806f51

Please sign in to comment.