For #62384
Change-Id: I10df580ef966e497ff8da4efde6dd6ce1ccb17b4
GitHub-Last-Rev:
5ad8e2e0473ff509b48e525f6c7328f6281766a3
GitHub-Pull-Request: golang/go#68855
Reviewed-on: https://go-review.googlesource.com/c/go/+/605056
Auto-Submit: Ian Lance Taylor <iant@google.com>
Reviewed-by: Jonathan Amsterdam <jba@google.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
pkg encoding, type TextAppender interface { AppendText } #62384
pkg encoding, type TextAppender interface, AppendText([]uint8) ([]uint8, error) #62384
pkg net/url, method (*URL) AppendBinary([]uint8) ([]uint8, error) #62384
+pkg log/slog, method (Level) AppendText([]uint8) ([]uint8, error) #62384
+pkg log/slog, method (*LevelVar) AppendText([]uint8) ([]uint8, error) #62384
--- /dev/null
+[Level] and [LevelVar] now implement the [encoding.TextAppender] interface.\r
return l.parse(s)
}
-// MarshalText implements [encoding.TextMarshaler]
+// AppendText implements [encoding.TextAppender]
// by calling [Level.String].
+func (l Level) AppendText(b []byte) ([]byte, error) {
+ return append(b, l.String()...), nil
+}
+
+// MarshalText implements [encoding.TextMarshaler]
+// by calling [Level.AppendText].
func (l Level) MarshalText() ([]byte, error) {
- return []byte(l.String()), nil
+ return l.AppendText(nil)
}
// UnmarshalText implements [encoding.TextUnmarshaler].
return fmt.Sprintf("LevelVar(%s)", v.Level())
}
+// AppendText implements [encoding.TextAppender]
+// by calling [Level.AppendText].
+func (v *LevelVar) AppendText(b []byte) ([]byte, error) {
+ return v.Level().AppendText(b)
+}
+
// MarshalText implements [encoding.TextMarshaler]
-// by calling [Level.MarshalText].
+// by calling [LevelVar.AppendText].
func (v *LevelVar) MarshalText() ([]byte, error) {
- return v.Level().MarshalText()
+ return v.AppendText(nil)
}
// UnmarshalText implements [encoding.TextUnmarshaler]
}
}
+func TestLevelAppendText(t *testing.T) {
+ buf := make([]byte, 4, 16)
+ want := LevelWarn - 3
+ wantData := []byte("\x00\x00\x00\x00INFO+1")
+ data, err := want.AppendText(buf)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if !bytes.Equal(data, wantData) {
+ t.Errorf("got %s, want %s", string(data), string(wantData))
+ }
+}
+
func TestLevelParse(t *testing.T) {
for _, test := range []struct {
in string
}
}
+func TestLevelVarAppendText(t *testing.T) {
+ var v LevelVar
+ v.Set(LevelWarn)
+ buf := make([]byte, 4, 16)
+ data, err := v.AppendText(buf)
+ if err != nil {
+ t.Fatal(err)
+ }
+ var v2 LevelVar
+ if err := v2.UnmarshalText(data[4:]); err != nil {
+ t.Fatal(err)
+ }
+ if g, w := v2.Level(), LevelWarn; g != w {
+ t.Errorf("got %s, want %s", g, w)
+ }
+}
+
func TestLevelVarFlag(t *testing.T) {
fs := flag.NewFlagSet("test", flag.ContinueOnError)
v := &LevelVar{}