Skip to content

Commit

Permalink
refactor(codegen/plc4go): reworked enum parsing to include a flag if …
Browse files Browse the repository at this point in the history
…it is a unknown enum
  • Loading branch information
sruehl committed Jul 12, 2022
1 parent 7b590d1 commit 2f17300
Show file tree
Hide file tree
Showing 171 changed files with 16,073 additions and 16,071 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -126,28 +126,24 @@ func ${type.name}FirstEnumForField${constantName?cap_first}(value ${helper.getLa
}
</#list>
</#if>
func ${type.name}ByValue(value <#if type.type.isPresent()>${helper.getLanguageTypeNameForTypeReference(type.type.orElseThrow())}<#else>string</#if>) ${type.name} {
func ${type.name}ByValue(value <#if type.type.isPresent()>${helper.getLanguageTypeNameForTypeReference(type.type.orElseThrow())}<#else>string</#if>) (enum ${type.name}, ok bool) {
switch value {
<#list helper.getUniqueEnumValues(type.enumValues) as enumValue>
case <#if type.type.orElseThrow().isStringTypeReference()>"${enumValue.value}"<#else>${enumValue.value}</#if>:
return ${type.name}_${enumValue.name}
return ${type.name}_${enumValue.name}, true
</#list>
}
return <#if type.type.orElseThrow().isStringTypeReference()>""<#elseif baseType == "bool">false<#else>0</#if>
return <#if type.type.orElseThrow().isStringTypeReference()>""<#elseif baseType == "bool">false<#else>0</#if>, false
}

func ${type.name}ByName(value string) (enum ${type.name}, ok bool) {
ok = true
switch value {
<#list helper.getUniqueEnumValues(type.enumValues) as enumValue>
case "${enumValue.name}":
enum = ${type.name}_${enumValue.name}
return ${type.name}_${enumValue.name}, true
</#list>
default:
enum = <#if type.type.orElseThrow().isStringTypeReference()>""<#elseif baseType == "bool">false<#else>0</#if>
ok = false
}
return
return <#if type.type.orElseThrow().isStringTypeReference()>""<#elseif baseType == "bool">false<#else>0</#if>, false
}

func ${type.name}Knows(value <#if type.type.isPresent()>${helper.getLanguageTypeNameForTypeReference(type.type.orElseThrow())}<#else>string</#if>) bool {
Expand Down Expand Up @@ -186,7 +182,11 @@ func ${type.name}Parse(readBuffer utils.ReadBuffer) (${type.name}, error) {
if err != nil {
return <#if type.type.orElseThrow().isStringTypeReference() || type.type.orElseThrow().isVstringTypeReference()>""<#elseif baseType == "bool">false<#else>0</#if>, errors.Wrap(err, "error reading ${type.name}")
}
return ${type.name}ByValue(val), nil
if enum, ok := ${type.name}ByValue(val); !ok {
return <#if type.type.orElseThrow().isStringTypeReference() || type.type.orElseThrow().isVstringTypeReference()>""<#elseif baseType == "bool">false<#else>0</#if>, errors.Errorf("no value %v found for ${type.name}", val)
} else {
return enum, nil
}
}

func (e ${type.name}) Serialize(writeBuffer utils.WriteBuffer) error {
Expand Down
5 changes: 3 additions & 2 deletions plc4go/internal/ads/Reader.go
Original file line number Diff line number Diff line change
Expand Up @@ -396,12 +396,13 @@ func (m *Reader) ToPlc4xReadResponse(amsTcpPaket readWriteModel.AmsTCPPacket, re
responseCodes[fieldName] = model.PlcResponseCode_INTERNAL_ERROR
continue
}
switch readWriteModel.ReturnCodeByValue(responseCode) {
val, _ := readWriteModel.ReturnCodeByValue(responseCode)
switch val {
case readWriteModel.ReturnCode_OK:
responseCodes[fieldName] = model.PlcResponseCode_OK
default:
// TODO: Implement this a little more ...
log.Error().Stringer("adsReturnCode", readWriteModel.ReturnCodeByValue(responseCode)).Msgf("Unmapped return code for %s", fieldName)
log.Error().Stringer("adsReturnCode", val).Msgf("Unmapped return code for %s", fieldName)
responseCodes[fieldName] = model.PlcResponseCode_INTERNAL_ERROR
}
}
Expand Down
3 changes: 2 additions & 1 deletion plc4go/internal/s7/TsapIdEncoder.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@ func encodeS7TsapId(deviceGroup model.DeviceGroup, rack int32, slot int32) uint1

func decodeDeviceGroup(tsapId int32) model.DeviceGroup {
deviceGroupCode := uint8((tsapId >> 8) & (0xFF))
return model.DeviceGroupByValue(deviceGroupCode)
value, _ := model.DeviceGroupByValue(deviceGroupCode)
return value
}

func decodeRack(tsapId int32) int64 {
Expand Down
176 changes: 88 additions & 88 deletions plc4go/protocols/ads/readwrite/model/AdsDataType.go

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

Loading

0 comments on commit 2f17300

Please sign in to comment.