diff --git a/errors.go b/errors.go index c6c9061..2e92185 100644 --- a/errors.go +++ b/errors.go @@ -8,4 +8,5 @@ var ( errInternalError = errors.New("Internal Error") errInvalidUTF8 = internalInvalidUTF8Complainer{} errNilReader = internalNilReaderComplainer{} + errNilWriter = internalNilWriterComplainer{} ) diff --git a/nilwriter.go b/nilwriter.go new file mode 100644 index 0000000..b0780f5 --- /dev/null +++ b/nilwriter.go @@ -0,0 +1,16 @@ +package utf8s + +type NilWriterComplainer interface { + error + NilWriterComplainer() +} + +type internalNilWriterComplainer struct{} + +func (complainer internalNilWriterComplainer) Error() string { + return "Nil Writer" +} + +func (complainer internalNilWriterComplainer) NilWriterComplainer() { + // Nothing here. +} diff --git a/writerune.go b/writerune.go index d7bf9a2..5dbc404 100644 --- a/writerune.go +++ b/writerune.go @@ -5,8 +5,10 @@ import ( ) // WriteRune writes a single UTF-8 encoded Unicode character and returns the number of bytes written. -func WriteRune(w io.Writer, r rune) (int, error) { - +func WriteRune(writer io.Writer, r rune) (int, error) { + if nil == writer { + return 0, errNilWriter + } switch { case 127 >= r: @@ -16,7 +18,7 @@ func WriteRune(w io.Writer, r rune) (int, error) { p := buffer[:] - return w.Write(p) + return writer.Write(p) case 0x7FF >= r: var buffer [2]byte @@ -26,7 +28,7 @@ func WriteRune(w io.Writer, r rune) (int, error) { p := buffer[:] - return w.Write(p) + return writer.Write(p) case 0xFFFF >= r: var buffer [3]byte @@ -37,7 +39,7 @@ func WriteRune(w io.Writer, r rune) (int, error) { p := buffer[:] - return w.Write(p) + return writer.Write(p) case 0x10FFFF >= r: var buffer [4]byte @@ -49,7 +51,7 @@ func WriteRune(w io.Writer, r rune) (int, error) { p := buffer[:] - return w.Write(p) + return writer.Write(p) default: return 0, errInternalError