32 lines
692 B
Go
32 lines
692 B
Go
package agent
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
func parseDecision(raw string) (reactDecision, error) {
|
|
raw = normalizeJSON(raw)
|
|
start := strings.Index(raw, "{")
|
|
end := strings.LastIndex(raw, "}")
|
|
if start < 0 || end < start {
|
|
return reactDecision{}, fmt.Errorf("no json object found")
|
|
}
|
|
raw = raw[start : end+1]
|
|
|
|
var out reactDecision
|
|
if err := json.Unmarshal([]byte(raw), &out); err != nil {
|
|
return reactDecision{}, err
|
|
}
|
|
return out, nil
|
|
}
|
|
|
|
func normalizeJSON(raw string) string {
|
|
raw = strings.TrimSpace(raw)
|
|
raw = strings.TrimPrefix(raw, "```json")
|
|
raw = strings.TrimPrefix(raw, "```")
|
|
raw = strings.TrimSuffix(raw, "```")
|
|
return strings.TrimSpace(raw)
|
|
}
|