changeset 1938:206b1dd31112

Moved time guessing to misc code to be recycled.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Mon, 21 Jan 2019 15:18:52 +0100
parents 73f9e15d0384
children 148917b4f859
files pkg/imports/agm.go pkg/misc/time.go
diffstat 2 files changed, 39 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/pkg/imports/agm.go	Mon Jan 21 13:32:13 2019 +0100
+++ b/pkg/imports/agm.go	Mon Jan 21 15:18:52 2019 +0100
@@ -27,6 +27,7 @@
 	"time"
 
 	"gemma.intevation.de/gemma/pkg/common"
+	"gemma.intevation.de/gemma/pkg/misc"
 	"gemma.intevation.de/gemma/pkg/models"
 )
 
@@ -109,19 +110,10 @@
 	return os.RemoveAll(agm.Dir)
 }
 
-func guessDate(s string) (time.Time, error) {
-	var err error
-	var t time.Time
-	for _, layout := range [...]string{
-		"02.01.2006 15:04",
-		"2006-01-02T15:04:05-07:00",
-	} {
-		if t, err = time.Parse(layout, s); err == nil {
-			break
-		}
-	}
-	return t, err
-}
+var guessDate = misc.TimeGuesser([]string{
+	"02.01.2006 15:04",
+	"2006-01-02T15:04:05-07:00",
+}).Guess
 
 // Do executes the actual approved gauge measurements import.
 func (agm *ApprovedGaugeMeasurements) Do(
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pkg/misc/time.go	Mon Jan 21 15:18:52 2019 +0100
@@ -0,0 +1,34 @@
+// This is Free Software under GNU Affero General Public License v >= 3.0.Reader.
+// 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):
+//  * Sascha L. Teichmann <sascha.teichmann@intevation.de>
+
+package misc
+
+import "time"
+
+// TimeGuesser is a list of time formats.
+type TimeGuesser []string
+
+// Guess tries to parse a given string by the entries of the layout
+// list one after another. The first matching time is returned.
+// If no layout matches the last error is returned or time zero
+// if the layout list is empty.
+func (tg TimeGuesser) Guess(s string) (time.Time, error) {
+	var err error
+	var t time.Time
+	for _, layout := range tg {
+		if t, err = time.Parse(layout, s); err == nil {
+			break
+		}
+	}
+	return t, err
+}