mirror of
https://github.com/tailscale/tailscale.git
synced 2025-01-10 01:53:49 +00:00
0045860060
Throughout our codebase we have types that only exist only to implement an io.Reader or io.Writer, when it would have been simpler, cleaner, and more readable to use an inlined function literal that closes over the relevant types. This is arguably more readable since it keeps the semantic logic in place rather than have it be isolated elsewhere. Note that a function literal that closes over some variables is semantic equivalent to declaring a struct with fields and having the Read or Write method mutate those fields. Updates #cleanup Signed-off-by: Joe Tsai <joetsai@digital-static.net>
24 lines
730 B
Go
24 lines
730 B
Go
// Copyright (c) Tailscale Inc & AUTHORS
|
|
// SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
// Package iox provides types to implement [io] functionality.
|
|
package iox
|
|
|
|
// TODO(https://go.dev/issue/21670): Deprecate or remove this functionality
|
|
// once the Go language supports implementing an 1-method interface directly
|
|
// using a function value of a matching signature.
|
|
|
|
// ReaderFunc implements [io.Reader] using the underlying function value.
|
|
type ReaderFunc func([]byte) (int, error)
|
|
|
|
func (f ReaderFunc) Read(b []byte) (int, error) {
|
|
return f(b)
|
|
}
|
|
|
|
// WriterFunc implements [io.Writer] using the underlying function value.
|
|
type WriterFunc func([]byte) (int, error)
|
|
|
|
func (f WriterFunc) Write(b []byte) (int, error) {
|
|
return f(b)
|
|
}
|