package order import ( "bufio" "github.com/ewy1/pik/describe" "github.com/ewy1/pik/identity" "io" "io/fs" "os" "strings" ) type Element struct { Identifier identity.Identity Description string } type Order struct { Elements []Element } var Empty = Order{} func FromFile(f fs.FS, path string) (Order, error) { fd, err := os.Open(path) if err != nil { return Empty, err } defer fd.Close() return FromReader(fd) } func FromReader(r io.Reader) (Order, error) { o := &Order{} scanner := bufio.NewScanner(r) scanner.Split(bufio.ScanLines) for scanner.Scan() { line := scanner.Text() line = strings.TrimSpace(line) if line == "" { continue } for _, p := range describe.DescriptionPrefixes { if strings.HasPrefix(line, p) { continue } } spl := strings.SplitN(line, "#", 2) e := &Element{ Identifier: identity.New(spl[0]), } if len(spl) > 1 { e.Description = spl[1] } o.Elements = append(o.Elements, *e) } return *o, nil }