view pkg/common/warn.go @ 5415:4ad68ab239b7 marking-single-beam

Factored creation of default class breaks in SR import to be reused with markings, too.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Wed, 07 Jul 2021 12:01:28 +0200
parents 5a650cde0574
children 6270951dda28
line wrap: on
line source

// 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) 2019 by via donau
//   – Österreichische Wasserstraßen-Gesellschaft mbH
// Software engineering by Intevation GmbH
//
// Author(s):
//  * Sascha L. Teichmann <sascha.teichmann@intevation.de>

package common

// WarningLimiter limits outputs with Log to a maximal number
// of MaxWarnings outputs.
type WarningLimiter struct {
	Log         func(format string, args ...interface{})
	MaxWarnings int
	Warnings    int
}

// Warn is a wrapper around the Log function with the
// same signature as the Log function so it can be used
// instead.
func (w *WarningLimiter) Warn(format string, args ...interface{}) {
	if w.Warnings++; w.Warnings <= w.MaxWarnings {
		w.Log(format, args...)
	}
}

// Close can be called to write a final message if the limit
// was reached.
func (w *WarningLimiter) Close() {
	if w.Warnings > w.MaxWarnings {
		w.Log("Too many warnings. %d ignored.", w.Warnings-w.MaxWarnings)
	}
}