Generated Code
This document explains generated code for each target language.
Fory IDL generated types are idiomatic in host languages and can be used directly as domain objects. Generated types also include to/from bytes helpers and registration helpers.
All snippets are representative excerpts from real generated output.
Example Fory IDL Schema
The sections below use this schema:
package demo;
enum DeviceTier [id=100] {
DEVICE_TIER_UNKNOWN = 0;
DEVICE_TIER_TIER1 = 1;
DEVICE_TIER_TIER2 = 2;
}
message User [id=101] {
string id = 1;
string name = 2;
optional string email = 3;
}
message SearchResponse [id=102] {
message Result [id=103] {
string url = 1;
string title = 2;
}
list<Result> results = 1;
}
message Dog [id=104] {
string name = 1;
}
message Cat [id=105] {
string name = 1;
}
union Animal [id=106] {
Dog dog = 1;
Cat cat = 2;
}
message Order [id=107] {
string id = 1;
ref User customer = 2;
list<string> items = 3;
map<string, int32> quantities = 4;
DeviceTier tier = 5;
Animal pet = 6;
}
Java
Output Layout
For package demo, Java code is generated under demo/:
DeviceTier.java,User.java,SearchResponse.java,Dog.java,Cat.java,Animal.java,Order.javaDemoForyRegistration.java
Type Generation
Enum prefix stripping keeps scoped enum values clean:
public enum DeviceTier {
UNKNOWN,
TIER1,
TIER2;
}
Messages are regular Java classes with @ForyField metadata and Java-style getters/setters:
public class Order {
@ForyField(id = 1)
private String id;
@ForyField(id = 2, nullable = true, ref = true)
private User customer;
@ForyField(id = 3)
private List<String> items;
@ForyField(id = 4)
private Map<String, Integer> quantities;
@ForyField(id = 5)
private DeviceTier tier;
@ForyField(id = 6)
private Animal pet;
public String getId() { ... }
public void setId(String id) { ... }
public User getCustomer() { ... }
public void setCustomer(User customer) { ... }
public byte[] toBytes() { ... }
public static Order fromBytes(byte[] bytes) { ... }
}
Nested messages become static inner classes:
public class SearchResponse {
public static class Result { ... }
}
Unions generate explicit case APIs:
Animal pet = Animal.ofDog(new Dog());
if (pet.hasDog()) {
Dog dog = pet.getDog();
}
Animal.AnimalCase c = pet.getAnimalCase();
int caseId = pet.getAnimalCaseId();