1// Copyright 2015 Keybase, Inc. All rights reserved. Use of
2// this source code is governed by the included BSD license.
3
4package libkb
5
6import (
7	"fmt"
8)
9
10type Warning interface {
11	Warning() string
12	Warn(g *GlobalContext)
13}
14
15type StringWarning string
16
17func (s StringWarning) Warning() string {
18	return string(s)
19}
20
21func Warningf(format string, a ...interface{}) Warning {
22	return StringWarning(fmt.Sprintf(format, a...))
23}
24
25func (s StringWarning) Warn(g *GlobalContext) {
26	g.Log.Warning(string(s))
27}
28
29func ErrorToWarning(e error) Warning {
30	if e == nil {
31		return nil
32	}
33	return StringWarning(e.Error())
34}
35
36type Warnings struct {
37	w []Warning
38}
39
40func (w Warnings) Warnings() []Warning {
41	return w.w
42}
43
44func (w Warnings) IsEmpty() bool {
45	return w.w == nil || len(w.w) == 0
46}
47
48func (w *Warnings) Push(e Warning) {
49	w.w = append(w.w, e)
50}
51
52func (w Warnings) Warn(g *GlobalContext) {
53	for _, e := range w.w {
54		e.Warn(g)
55	}
56}
57