You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
914 B
Go
52 lines
914 B
Go
package cabret
|
|
|
|
const MatchResult = "MatchResult"
|
|
|
|
type Map map[string]any
|
|
|
|
type File struct {
|
|
Path string
|
|
Content
|
|
}
|
|
|
|
type Content struct {
|
|
// Type for known content formats is just the mime-type
|
|
Type string
|
|
|
|
// Data is the content of the file
|
|
Data []byte
|
|
|
|
// Metadata is any extra data of the file (e.g. yaml frontmatter) or injected by plugins
|
|
Metadata Map
|
|
}
|
|
|
|
type ListOperation interface {
|
|
MapAll(contents []Content) ([]Content, error)
|
|
}
|
|
|
|
type ItemOperation interface {
|
|
FlatMap(content Content) (*Content, error)
|
|
}
|
|
|
|
type FlatMapToMapAll struct{ FlatMapOperation }
|
|
|
|
func (op FlatMapToMapAll) MapAll(contents []Content) ([]Content, error) {
|
|
mapped := []Content{}
|
|
|
|
for _, item := range contents {
|
|
result, err := op.FlatMap(item)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// skip terminal operations
|
|
if result == nil {
|
|
continue
|
|
}
|
|
|
|
mapped = append(mapped, *result)
|
|
}
|
|
|
|
return mapped, nil
|
|
}
|