From 9c22ab945c07cd9bbbb976e6388295470ce43746 Mon Sep 17 00:00:00 2001 From: Knut Ahlers Date: Mon, 23 Dec 2019 21:32:10 +0100 Subject: [PATCH] =?UTF-8?q?Fix:=20Looks=20like=20SOME=20positions=20are=20?= =?UTF-8?q?arrays=20of=20int=20=F0=9F=98=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Knut Ahlers --- block_economy.go | 8 ++++---- block_gps_waypoint_storage.go | 4 ++-- genericMarshaller.go | 18 ++++++++++++++++++ genericUnmarshaller.go | 22 ++++++++++++++++++++++ 4 files changed, 46 insertions(+), 6 deletions(-) diff --git a/block_economy.go b/block_economy.go index 99d53ee..255eaf6 100644 --- a/block_economy.go +++ b/block_economy.go @@ -53,17 +53,17 @@ type Economy struct { StoredRainWetness int64 `sii:"stored_rain_wetness"` TimeZone int64 `sii:"time_zone"` TimeZoneName string `sii:"time_zone_name"` - LastFerryPosition [3]float32 `sii:"last_ferry_position"` + LastFerryPosition [3]int64 `sii:"last_ferry_position"` StoredShowWeigh bool `sii:"stored_show_weigh"` StoredNeedToWeigh bool `sii:"stored_need_to_weigh"` - StoredNavStartPos [3]float32 `sii:"stored_nav_start_pos"` - StoredNavEndPos [3]float32 `sii:"stored_nav_end_pos"` + StoredNavStartPos [3]int64 `sii:"stored_nav_start_pos"` + StoredNavEndPos [3]int64 `sii:"stored_nav_end_pos"` StoredGPSBehind int64 `sii:"stored_gps_behind"` StoredGPSAhead int64 `sii:"stored_gps_ahead"` StoredGPSBehindWaypoints []Ptr `sii:"stored_gps_behind_waypoints"` StoredGPSAheadWaypoints []Ptr `sii:"stored_gps_ahead_waypoints"` StoredGPSAvoidWaypoints []Ptr `sii:"stored_gps_avoid_waypoints"` - StoredStartTollgatePos [3]float32 `sii:"stored_start_tollgate_pos"` + StoredStartTollgatePos [3]int64 `sii:"stored_start_tollgate_pos"` StoredTutorialState int64 `sii:"stored_tutorial_state"` StoredMapActions []Ptr `sii:"stored_map_actions"` CleanDistanceCounter int64 `sii:"clean_distance_counter"` diff --git a/block_gps_waypoint_storage.go b/block_gps_waypoint_storage.go index 36ad9ca..8e0b578 100644 --- a/block_gps_waypoint_storage.go +++ b/block_gps_waypoint_storage.go @@ -5,8 +5,8 @@ func init() { } type GPSWaypointStorage struct { - NavNodePosition [3]float32 `sii:"nav_node_position"` - Direction Ptr `sii:"direction"` + NavNodePosition [3]int64 `sii:"nav_node_position"` + Direction Ptr `sii:"direction"` blockName string } diff --git a/genericMarshaller.go b/genericMarshaller.go index 26e61ad..8c31e4f 100644 --- a/genericMarshaller.go +++ b/genericMarshaller.go @@ -104,6 +104,24 @@ func genericMarshal(in interface{}) ([]byte, error) { buf.WriteString(fmt.Sprintf(" %s: (%s)\n", attributeName, bytes.Join(vals, []byte(", ")))) + case reflect.Int64: + var vals [][]byte + + switch typeField.Type.Len() { + + case 3: + for _, v := range valField.Interface().([3]int64) { + bv := []byte(strconv.FormatInt(v, 10)) + vals = append(vals, bv) + } + + default: + return nil, errors.Errorf("Unsupported type: [%d]%s", typeField.Type.Len(), typeField.Type.Elem().Kind()) + + } + + buf.WriteString(fmt.Sprintf(" %s: (%s)\n", attributeName, bytes.Join(vals, []byte(", ")))) + default: return nil, errors.Errorf("Unsupported type: [%d]%s", typeField.Type.Len(), typeField.Type.Elem().Kind()) diff --git a/genericUnmarshaller.go b/genericUnmarshaller.go index 69a83a3..4e3c3fd 100644 --- a/genericUnmarshaller.go +++ b/genericUnmarshaller.go @@ -131,6 +131,28 @@ func genericUnmarshal(in []byte, out interface{}, unit *Unit) error { } + case reflect.Int64: + switch typeField.Type.Len() { + + case 3: + grps := regexp.MustCompile(`^\(([0-9.-]+), ([0-9.-]+), ([0-9.-]+)\)$`). + FindSubmatch(getSingleValue(in, attributeName)) + var v [3]int64 + + for i := range v { + val, err := strconv.ParseInt(string(grps[i+1][:]), 10, 64) + if err != nil { + return errors.Wrapf(err, "Unable to parse int64 for attribute %q", attributeName) + } + v[i] = val + } + valField.Set(reflect.ValueOf(v)) + + default: + return errors.Errorf("Unsupported type: [%d]%s", typeField.Type.Len(), typeField.Type.Elem().Kind()) + + } + default: return errors.Errorf("Unsupported type: [%d]%s", typeField.Type.Len(), typeField.Type.Elem().Kind())