diff pkg/models/isrs.go @ 1900:6a67cd819e93

To prepare stretch import made some model data types re-usable.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Fri, 18 Jan 2019 15:04:53 +0100
parents
children 6ffc372cde1e
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pkg/models/isrs.go	Fri Jan 18 15:04:53 2019 +0100
@@ -0,0 +1,73 @@
+// This is Free Software under GNU Affero General Public License v >= 3.0
+// without warranty, see README.md and license for details.
+//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// License-Filename: LICENSES/AGPL-3.0.txt
+//
+// Copyright (C) 2018 by via donau
+//   – Österreichische Wasserstraßen-Gesellschaft mbH
+// Software engineering by Intevation GmbH
+//
+// Author(s):
+//  * Raimund Renkert <raimund.renkert@intevation.de>
+//  * Sascha L. Teichmann <sascha.teichmann@intevation.de>
+
+package models
+
+import (
+	"encoding/json"
+	"errors"
+	"fmt"
+	"strconv"
+)
+
+// Isrs represents the gauge identification data structure
+type Isrs struct {
+	CountryCode    string
+	LoCode         string
+	FairwaySection string
+	Orc            string
+	Hectometre     int
+}
+
+func (isrs *Isrs) UnmarshalJSON(data []byte) error {
+	var s string
+	if err := json.Unmarshal(data, &s); err != nil {
+		return err
+	}
+	in, err := IsrsFromString(s)
+	if err != nil {
+		return err
+	}
+	*isrs = *in
+	return nil
+}
+
+// IsrsFromString converts string representation of isrs code to type Isrs
+func IsrsFromString(isrsCode string) (*Isrs, error) {
+	if len(isrsCode) < 20 {
+		return nil, errors.New("ISRS code too short")
+	}
+	hm, err := strconv.Atoi(isrsCode[15:20])
+	if err != nil {
+		return nil, err
+	}
+	isrs := Isrs{
+		CountryCode:    isrsCode[0:2],
+		LoCode:         isrsCode[2:5],
+		FairwaySection: isrsCode[5:10],
+		Orc:            isrsCode[10:15],
+		Hectometre:     hm,
+	}
+	return &isrs, nil
+}
+
+// String creates a isrs code string from Isrs
+func (isrs *Isrs) String() string {
+	return fmt.Sprintf("%s%s%s%s%05d",
+		isrs.CountryCode,
+		isrs.LoCode,
+		isrs.FairwaySection,
+		isrs.Orc,
+		isrs.Hectometre)
+}