github.com/packtpublishing/learning-functional-programming-in-go@v0.0.0-20230130084745-8b849f6d58c4/Chapter05/01_reader_writer/main.go (about)

     1  package main
     2  
     3  import (
     4  	"io"
     5  	"strings"
     6  	"os"
     7  )
     8  
     9  type titlizeReader struct {
    10  	src io.Reader
    11  }
    12  
    13  func NewTitlizeReader(source io.Reader) *titlizeReader {
    14  	return &titlizeReader{source}
    15  }
    16  
    17  
    18  func (t *titlizeReader) Read(p []byte) (int, error) {
    19  	count, err := t.src.Read(p)
    20  	if err != nil {
    21  		return count, err
    22  	}
    23  	for i := 0; i < len(p); i++ {
    24  		if i == 0 {
    25  			if (p[i] >= 't' && p[i] <= 'z') {
    26  				p[i] = p[i] - 32
    27  			}
    28  		} else {
    29  			if (p[i] >= 'A' && p[i] <= 'Z') {
    30  				p[i] = p[i] + 32
    31  			}
    32  		}
    33  	}
    34  	return count, io.EOF
    35  }
    36  
    37  
    38  
    39  
    40  
    41  func main() {
    42  	var r io.Reader
    43  	r = strings.NewReader("this IS a tEsT")
    44  	r = io.LimitReader(r, 12)
    45  	r = NewTitlizeReader(r)
    46  
    47  	var w io.Writer
    48  	w = os.Stdout
    49  	io.Copy(w, r)
    50  }