From 6a4e25b1c691846185e9dd698c1558981089738c Mon Sep 17 00:00:00 2001 From: Charlie Stanton Date: Tue, 25 Apr 2023 13:55:26 +0100 Subject: Refactor Atom and Value code out of walk.go and into separate files --- walk/value.go | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 walk/value.go (limited to 'walk/value.go') diff --git a/walk/value.go b/walk/value.go new file mode 100644 index 0000000..2e2c3c9 --- /dev/null +++ b/walk/value.go @@ -0,0 +1,78 @@ +package walk + +import ( + "fmt" +) + +type ValueTerminal int +const ( + ArrayBegin ValueTerminal = iota + ArrayEnd + MapBegin + MapEnd +) +func (value ValueTerminal) Atomise(in []Atom) []Atom { + return append(in, NewAtomTerminal(value)) +} +func (value ValueTerminal) String() string { + switch value { + case ArrayBegin: + return "[" + case ArrayEnd: + return "]" + case MapBegin: + return "{" + case MapEnd: + return "}" + default: + panic("Unknown TerminalValue") + } +} + +type ValueNull struct {} +func (value ValueNull) Atomise(in []Atom) []Atom { + return append(in, NewAtomNull()) +} +func (value ValueNull) String() string { + return "null" +} + +type ValueBool bool +func (value ValueBool) Atomise(in []Atom) []Atom { + return append(in, NewAtomBool(bool(value))) +} +func (value ValueBool) String() string { + if value { + return "true" + } else { + return "false" + } +} + +type ValueNumber float64 +func (value ValueNumber) Atomise(in []Atom) []Atom { + return append(in, NewAtomNumber(float64(value))) +} +func (value ValueNumber) String() string { + v := float64(value) + return fmt.Sprintf("%f", v) +} + +type ValueString string +func (value ValueString) Atomise(in []Atom) []Atom { + in = append(in, NewAtomStringTerminal()) + for _, char := range value { + in = append(in, NewAtomStringRune(char)) + } + in = append(in, NewAtomStringTerminal()) + return in +} +func (value ValueString) String() string { + return fmt.Sprintf("\"%s\"", string(value)) +} + +type Value interface { + // Append this values atoms to the input + Atomise(in []Atom) []Atom + String() string +} -- cgit v1.2.3