Documentation
¶
Index ¶
- type NopWriteCloser
- type OS
- type ReadChain
- type ReadCloser
- type ReadCloser2
- type ReadFS
- type ReadFSChain
- type ReaderBuilder
- type ReaderFSBuilder
- type WriteChain
- type WriteCloser2
- type WriteFS
- type WriteFSBuilder
- type WriteFSChain
- type WriterBuilder
- func (wc *WriterBuilder) IntoFS(next WriteFSChain) *WriteFSBuilder
- func (wc *WriterBuilder) Open(name string) *WriterFileBuilder
- func (wc *WriterBuilder) Then(next WriteChain) *WriterBuilder
- func (wc *WriterBuilder) WritingTo(w io.WriteCloser) (io.WriteCloser, error)
- func (wc *WriterBuilder) WritingToFS(fs WriteFS) WriteFS
- type WriterFileBuilder
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type NopWriteCloser ¶ added in v0.1.7
func (NopWriteCloser) Close ¶ added in v0.1.7
func (NopWriteCloser) Close() error
type ReadChain ¶
type ReadChain func(io.ReadCloser) (io.ReadCloser, error)
ReadChain represents a common pattern in go packages. For examples, see: https://pkg.go.dev/compress/gzip#NewReader
While this type only expects an io.Reader to be returned, it will detect if the result is a Closer and make sure the types Close function is run.
type ReadCloser2 ¶ added in v0.1.7
type ReadCloser2 struct {
io.ReadCloser
Closer io.Closer
}
func (ReadCloser2) Close ¶ added in v0.1.7
func (wc ReadCloser2) Close() error
type ReadFSChain ¶ added in v0.1.4
type ReadFSChain func(io.ReadCloser) (ReadFS, error)
type ReaderBuilder ¶ added in v0.1.1
type ReaderBuilder struct {
// contains filtered or unexported fields
}
ReaderBuilder lets you build a chain of io.Readers in a more natural way
func ReadingFrom ¶
func ReadingFrom(r io.ReadCloser) *ReaderBuilder
ReadingFrom creates a new ReaderBuilder where the contents of the chain comes from the given io.Reader
If r is an io.ReadCloser, the resulting Reader after building the chain will call r.Close for you
func (*ReaderBuilder) AsFS ¶ added in v0.1.4
func (chain *ReaderBuilder) AsFS(next ReadFSChain) *ReaderFSBuilder
Example ¶
package main
import (
"encoding/base64"
"io"
"os"
"github.com/conradludgate/chain"
"github.com/conradludgate/chain/archive"
"github.com/conradludgate/chain/encoding"
)
func main() {
zip := archive.ZipConfig{}
b64 := encoding.Base64Config{Encoding: base64.RawStdEncoding}
fs, _ := chain.ReadingFromFS(chain.OS{RootDir: "./example"}).
Open("archive.zip").
AsFS(zip.FSReader).
Finally(b64.Decode)
defer fs.Close()
r, _ := fs.Open("hello.txt")
defer r.Close()
_, _ = io.Copy(os.Stdout, r)
}
func (*ReaderBuilder) Finally ¶ added in v0.1.1
func (chain *ReaderBuilder) Finally(next ReadChain) (io.ReadCloser, error)
Finally adds the last ReadChain to the current builder chain, then builds it into an io.ReadCloser
func (*ReaderBuilder) Then ¶ added in v0.1.1
func (chain *ReaderBuilder) Then(next ReadChain) *ReaderBuilder
Then adds the next ReadChain to the current builder chain
type ReaderFSBuilder ¶ added in v0.1.4
type ReaderFSBuilder struct {
// contains filtered or unexported fields
}
func ReadingFromFS ¶ added in v0.1.5
func ReadingFromFS(fs ReadFS) *ReaderFSBuilder
Example ¶
package main
import (
"encoding/base64"
"io"
"os"
"github.com/conradludgate/chain"
"github.com/conradludgate/chain/encoding"
)
func main() {
b64 := encoding.Base64Config{Encoding: base64.RawStdEncoding}
fs, _ := chain.ReadingFromFS(chain.OS{RootDir: "./example"}).Finally(b64.Decode)
defer fs.Close()
r, _ := fs.Open("hello.txt")
defer r.Close()
_, _ = io.Copy(os.Stdout, r)
}
func (*ReaderFSBuilder) Finally ¶ added in v0.1.4
func (chain *ReaderFSBuilder) Finally(next ReadChain) (ReadFS, error)
func (*ReaderFSBuilder) Open ¶ added in v0.1.6
func (chain *ReaderFSBuilder) Open(name string) *ReaderBuilder
Example ¶
package main
import (
"encoding/base64"
"io"
"os"
"github.com/conradludgate/chain"
"github.com/conradludgate/chain/archive"
"github.com/conradludgate/chain/encoding"
)
func main() {
zip := archive.ZipConfig{}
b64 := encoding.Base64Config{Encoding: base64.RawStdEncoding}
r, _ := chain.ReadingFromFS(chain.OS{RootDir: "./example"}).
Open("archive.zip").
AsFS(zip.FSReader).
Open("hello.txt").
Finally(b64.Decode)
defer r.Close()
_, _ = io.Copy(os.Stdout, r)
}
func (*ReaderFSBuilder) Then ¶ added in v0.1.4
func (chain *ReaderFSBuilder) Then(next ReadChain) *ReaderFSBuilder
type WriteChain ¶
type WriteChain func(io.WriteCloser) (io.WriteCloser, error)
WriteChain represents a common pattern in go packages. For examples, see: https://pkg.go.dev/compress/gzip#NewWriter https://pkg.go.dev/golang.org/x/crypto/openpgp#Encrypt
While this type only expects an io.Writer to be returned, it will detect if the result is a Closer and make sure the types Close function is run.
type WriteCloser2 ¶ added in v0.1.7
type WriteCloser2 struct {
io.WriteCloser
Closer io.Closer
}
func (WriteCloser2) Close ¶ added in v0.1.7
func (wc WriteCloser2) Close() error
type WriteFSBuilder ¶ added in v0.1.4
type WriteFSBuilder struct {
// contains filtered or unexported fields
}
func (*WriteFSBuilder) Then ¶ added in v0.1.4
func (wc *WriteFSBuilder) Then(next WriteChain) *WriteFSBuilder
func (*WriteFSBuilder) WritingTo ¶ added in v0.1.4
func (wc *WriteFSBuilder) WritingTo(w io.WriteCloser) (WriteFS, error)
type WriteFSChain ¶ added in v0.1.4
type WriteFSChain func(io.WriteCloser) (WriteFS, error)
type WriterBuilder ¶ added in v0.1.1
type WriterBuilder struct {
// contains filtered or unexported fields
}
WriterBuilder lets you build a chain of io.Writers in a more natural way
func NewWriteBuilder ¶ added in v0.1.1
func NewWriteBuilder(first WriteChain) *WriterBuilder
NewWriteBuilder creates a new WriteBuilder with the given WriteChain being the first in the chain
Example ¶
package main
import (
"bytes"
"encoding/hex"
"io"
"os"
"github.com/conradludgate/chain"
"github.com/conradludgate/chain/cipher"
"github.com/conradludgate/chain/compress"
)
func main() {
key, _ := hex.DecodeString("6368616e676520746869732070617373")
aes := cipher.AESConfig{Key: key}
gzip := compress.GZIPConfig{}
output := bytes.NewBuffer(nil)
w, _ := chain.NewWriteBuilder(aes.Encrypt).
Then(gzip.Compress).
WritingTo(chain.NopWriteCloser{Writer: output})
_, _ = io.WriteString(w, "hello world")
w.Close()
r, _ := chain.ReadingFrom(io.NopCloser(output)).
Then(gzip.Decompress).
Finally(aes.Decrypt)
_, _ = io.Copy(os.Stdout, r)
r.Close()
}
Output: hello world
func (*WriterBuilder) IntoFS ¶ added in v0.1.4
func (wc *WriterBuilder) IntoFS(next WriteFSChain) *WriteFSBuilder
Example ¶
package main
import (
"bytes"
"encoding/hex"
"io"
"os"
"github.com/conradludgate/chain"
"github.com/conradludgate/chain/archive"
"github.com/conradludgate/chain/cipher"
)
func main() {
key, _ := hex.DecodeString("6368616e676520746869732070617373")
aes := cipher.AESConfig{Key: key}
zip := archive.ZipConfig{}
output := bytes.NewBuffer(nil)
w, _ := chain.NewWriteBuilder(aes.Encrypt).
Open("hello.txt").
InFS(zip.FSWriter).
WritingTo(chain.NopWriteCloser{Writer: output})
_, _ = io.WriteString(w, "hello world")
w.Close()
r, _ := chain.ReadingFrom(io.NopCloser(output)).
AsFS(zip.FSReader).
Open("hello.txt").
Finally(aes.Decrypt)
_, _ = io.Copy(os.Stdout, r)
r.Close()
}
Output: hello world
func (*WriterBuilder) Open ¶ added in v0.1.8
func (wc *WriterBuilder) Open(name string) *WriterFileBuilder
func (*WriterBuilder) Then ¶ added in v0.1.1
func (wc *WriterBuilder) Then(next WriteChain) *WriterBuilder
Then adds the next WriteChain to the current builder chain. Returns self
func (*WriterBuilder) WritingTo ¶ added in v0.1.1
func (wc *WriterBuilder) WritingTo(w io.WriteCloser) (io.WriteCloser, error)
WritingTo builds the chain. The resulting data from the chain is written to the io.Writer provided.
If w is a Closer type too, calling the returned writer's Close function will also close w.
func (*WriterBuilder) WritingToFS ¶ added in v0.1.5
func (wc *WriterBuilder) WritingToFS(fs WriteFS) WriteFS
type WriterFileBuilder ¶ added in v0.1.8
type WriterFileBuilder struct {
// contains filtered or unexported fields
}
func (*WriterFileBuilder) InFS ¶ added in v0.1.8
func (builder *WriterFileBuilder) InFS(next WriteFSChain) *WriterBuilder
func (*WriterFileBuilder) WritingToFS ¶ added in v0.1.8
func (builder *WriterFileBuilder) WritingToFS(fs WriteFS) (io.WriteCloser, error)