net.intelie.pipes.MacroModule Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of pipes-api Show documentation
Show all versions of pipes-api Show documentation
Intelie Pipes' API classes and interfaces
package net.intelie.pipes;
import net.intelie.pipes.ast.AstNode;
import net.intelie.pipes.ast.RawNode;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class MacroModule implements Module {
private static final long serialVersionUID = 1L;
private final List functions;
public MacroModule(Object... args) {
this(Arrays.stream(args).map(value -> new RawNode(null, value)).toArray(AstNode[]::new));
}
private MacroModule(AstNode[] nodes) {
this.functions = makeFunctions(nodes);
}
public static List makeFunctions(AstNode[] args) {
List functions = new ArrayList<>();
for (int i = 0; i < args.length; i++) {
int ii = i;
functions.add(new AstFunction("@@" + ii) {
@Override
public AstNode getNode(ArgQueue queue) {
return args[ii];
}
});
}
return functions;
}
public static MacroModule fromAstNodes(AstNode... args) {
return new MacroModule(args);
}
public static MacroModule fromCompiled(Object... args) {
return new MacroModule(args);
}
@Override
public Iterable functions() {
return functions;
}
@Override
public String toString() {
return "macro module with " + functions.size() + " macros";
}
}