3 Commits

Author SHA1 Message Date
amery dbf3e6a8f9 Unmarshal: WIP
Signed-off-by: Alejandro Mery <amery@jpi.io>
2023-08-31 14:20:41 +00:00
amery f473035f14 Decoder: WIP
Signed-off-by: Alejandro Mery <amery@jpi.io>
2023-08-31 14:20:41 +00:00
amery f64d4ccd8a basic: WIP
Signed-off-by: Alejandro Mery <amery@jpi.io>
2023-08-31 14:20:41 +00:00
2 changed files with 2 additions and 76 deletions
-73
View File
@@ -1,73 +0,0 @@
package basic
import (
"bytes"
"io"
"io/fs"
"log"
"strings"
"asciigoat.org/core/lexer"
"asciigoat.org/ini/parser"
)
type token struct {
pos lexer.Position
typ parser.TokenType
value string
}
type decoder struct {
p *parser.Parser
out *Document
queue []token
curSection *Section
curField *Field
}
func (dec *decoder) OnToken(pos lexer.Position, typ parser.TokenType, value string) error {
tok := token{pos, typ, value}
log.Printf("%s[%v]: %s %s: %q", "decoder", len(dec.queue), pos, typ, value)
dec.queue = append(dec.queue, tok)
return nil
}
func (*decoder) OnError(pos lexer.Position, hint string, err error) error {
log.Printf("%s: %s %s: %s: %v", "decoder", pos, "error", hint, err)
return err
}
// Decode ...
func Decode(r io.Reader) (*Document, error) {
var out Document
if r == nil {
return nil, fs.ErrNotExist
}
// parser
p := parser.NewParser(r)
// decoder
dec := decoder{p: p, out: &out}
// glue
p.OnToken = dec.OnToken
p.OnError = dec.OnError
// Go!
err := p.Run()
return &out, err
}
// DecodeBytes ...
func DecodeBytes(b []byte) (*Document, error) {
return Decode(bytes.NewReader(b))
}
// DecodeString ...
func DecodeString(s string) (*Document, error) {
return Decode(strings.NewReader(s))
}
+2 -3
View File
@@ -3,7 +3,6 @@ package ini
import (
"bytes"
"io"
"strings"
"asciigoat.org/core"
"asciigoat.org/ini/parser"
@@ -40,10 +39,10 @@ func NewDecoder(r io.Reader) *Decoder {
// NewDecoderBytes creates a Decoder over a provided bytes array
func NewDecoderBytes(b []byte) *Decoder {
return NewDecoder(bytes.NewReader(b))
return NewDecoder(bytes.NewBuffer(b))
}
// NewDecoderString creates a Decoder over a provided string of data
func NewDecoderString(s string) *Decoder {
return NewDecoder(strings.NewReader(s))
return NewDecoder(bytes.NewBufferString(s))
}