MCPcopy
hub / github.com/apache/casbin / parseBuffer

Method parseBuffer

config/config.go:101–167  ·  view source on GitHub ↗
(buf *bufio.Reader)

Source from the content-addressed store, hash-verified

99}
100
101func (c *Config) parseBuffer(buf *bufio.Reader) error {
102 var section string
103 var lineNum int
104 var buffer bytes.Buffer
105 var canWrite bool
106 for {
107 if canWrite {
108 if err := c.write(section, lineNum, &buffer); err != nil {
109 return err
110 } else {
111 canWrite = false
112 }
113 }
114 lineNum++
115 line, _, err := buf.ReadLine()
116 if err == io.EOF {
117 // force write when buffer is not flushed yet
118 if buffer.Len() > 0 {
119 if err = c.write(section, lineNum, &buffer); err != nil {
120 return err
121 }
122 }
123 break
124 } else if err != nil {
125 return err
126 }
127
128 line = bytes.TrimSpace(line)
129 switch {
130 case bytes.Equal(line, []byte{}), bytes.HasPrefix(line, DEFAULT_COMMENT_SEM),
131 bytes.HasPrefix(line, DEFAULT_COMMENT):
132 canWrite = true
133 continue
134 case bytes.HasPrefix(line, []byte{'['}) && bytes.HasSuffix(line, []byte{']'}):
135 // force write when buffer is not flushed yet
136 if buffer.Len() > 0 {
137 if err := c.write(section, lineNum, &buffer); err != nil {
138 return err
139 }
140 canWrite = false
141 }
142 section = string(line[1 : len(line)-1])
143 default:
144 var p []byte
145 if bytes.HasSuffix(line, DEFAULT_MULTI_LINE_SEPARATOR) {
146 p = bytes.TrimSpace(line[:len(line)-1])
147 p = append(p, " "...)
148 } else {
149 p = line
150 canWrite = true
151 }
152
153 end := len(p)
154 for i, value := range p {
155 if value == DEFAULT_COMMENT[0] || value == DEFAULT_COMMENT_SEM[0] {
156 end = i
157 break
158 }

Callers 2

NewConfigFromTextFunction · 0.95
parseMethod · 0.95

Calls 1

writeMethod · 0.95

Tested by

no test coverage detected