Mercurial > gemma
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) +}