github.com/jhump/protoreflect@v1.16.0/dynamic/indent.go (about) 1 package dynamic 2 3 import "bytes" 4 5 type indentBuffer struct { 6 bytes.Buffer 7 indent string 8 indentCount int 9 comma bool 10 } 11 12 func (b *indentBuffer) start() error { 13 if b.indentCount >= 0 { 14 b.indentCount++ 15 return b.newLine(false) 16 } 17 return nil 18 } 19 20 func (b *indentBuffer) sep() error { 21 if b.indentCount >= 0 { 22 _, err := b.WriteString(": ") 23 return err 24 } else { 25 return b.WriteByte(':') 26 } 27 } 28 29 func (b *indentBuffer) end() error { 30 if b.indentCount >= 0 { 31 b.indentCount-- 32 return b.newLine(false) 33 } 34 return nil 35 } 36 37 func (b *indentBuffer) maybeNext(first *bool) error { 38 if *first { 39 *first = false 40 return nil 41 } else { 42 return b.next() 43 } 44 } 45 46 func (b *indentBuffer) next() error { 47 if b.indentCount >= 0 { 48 return b.newLine(b.comma) 49 } else if b.comma { 50 return b.WriteByte(',') 51 } else { 52 return b.WriteByte(' ') 53 } 54 } 55 56 func (b *indentBuffer) newLine(comma bool) error { 57 if comma { 58 err := b.WriteByte(',') 59 if err != nil { 60 return err 61 } 62 } 63 64 err := b.WriteByte('\n') 65 if err != nil { 66 return err 67 } 68 69 for i := 0; i < b.indentCount; i++ { 70 _, err := b.WriteString(b.indent) 71 if err != nil { 72 return err 73 } 74 } 75 return nil 76 }