import "fmt"
import "golang/strings" as golang_strings
import "iter"
import "world/collect"

file "/tmp/foo" {
	state => $const.res.file.state.exists,
	content => "i am foo\n",

	Meta:export => ["*",],
	#Meta:export => ["${hostname}",], # alternatively
}
file "/tmp/fah" {
	state => $const.res.file.state.exists,
	content => "i am fah\n",

	#Meta:export => ["*",],
	Meta:export => ["${hostname}",],
}

$all = collect.res("file") # []struct{name str; host str;}

# any kind of filter code that you want!
$fn = func($st) {
	golang_strings.has_prefix($st->name, "/tmp/fo")
}

$filtered = iter.filter($all, $fn)

print "all" {
	msg => fmt.printf("%v", $all),

	Meta:autogroup => false,
}
print "filtered" {
	msg => fmt.printf("%v", $filtered),

	Meta:autogroup => false,
}

collect file $filtered {
	Meta:hidden => true, # let's not apply these for now
}

# you can do it manually like this
#$collected = [
#	struct{name => "/tmp/foo", host => "${hostname}",},
#]
#
#collect file $collected {
#	Meta:hidden => false,
#}
