package me.tomassetti.turin.compiler;
import me.tomassetti.turin.parser.ast.typeusage.BasicTypeUsageNode;
import me.tomassetti.turin.parser.ast.*;
import me.tomassetti.turin.parser.ast.properties.PropertyDefinition;
import me.tomassetti.turin.parser.ast.typeusage.ReferenceTypeUsageNode;
import java.util.Collections;
import java.util.Optional;
public class ExamplesAst {
public static TurinFile registryAst() {
// define AST
TurinFile turinFile = new TurinFile();
NamespaceDefinition namespaceDefinition = new NamespaceDefinition("registry");
turinFile.setNameSpace(namespaceDefinition);
TurinTypeDefinition person = new TurinTypeDefinition("Person");
person.setPosition(Position.create(0, 0, 0, 0));
PropertyDefinition firstNameProperty = new PropertyDefinition("firstName", new ReferenceTypeUsageNode("String"), Optional.empty(), Optional.empty(), Collections.emptyList());
person.add(firstNameProperty);
PropertyDefinition lastNameProperty = new PropertyDefinition("lastName", new ReferenceTypeUsageNode("String"), Optional.empty(), Optional.empty(), Collections.emptyList());
person.add(lastNameProperty);
TurinTypeDefinition address = new TurinTypeDefinition("Address");
address.setPosition(Position.create(0, 0, 0, 0));
PropertyDefinition streetProperty = new PropertyDefinition("street", new ReferenceTypeUsageNode("String"), Optional.empty(), Optional.empty(), Collections.emptyList());
address.add(streetProperty);
PropertyDefinition numberProperty = new PropertyDefinition("number", new BasicTypeUsageNode("uint"), Optional.empty(), Optional.empty(), Collections.emptyList());
address.add(numberProperty);
PropertyDefinition cityProperty = new PropertyDefinition("city", new ReferenceTypeUsageNode("String"), Optional.empty(), Optional.empty(), Collections.emptyList());
address.add(cityProperty);
PropertyDefinition zipProperty = new PropertyDefinition("zip", new BasicTypeUsageNode("uint"), Optional.empty(), Optional.empty(), Collections.emptyList());
address.add(zipProperty);
turinFile.add(person);
turinFile.add(address);
return turinFile;
}
}