blob: a8a872d872990c060e9d9a7d8911ff3f62b823af [file] [view]
---
title: Overview
sidebar_position: 1
id: index
license: |
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
---
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 schema modules or registration helpers, depending on the target language.
Generated schema modules are named from the schema source file, not from the
package or namespace. In targets that expose the module directly in a language
package or namespace, names such as `AddressbookForyModule` or
`ComplexPbForyModule` let multiple IDL files target the same package or
namespace without producing colliding `ForyModule` types.
## Reference Schemas
The examples below use two real schemas:
1. `addressbook.fdl` (explicit type IDs)
2. `auto_id.fdl` (no explicit type IDs)
### `addressbook.fdl` Excerpt
```protobuf
package addressbook;
option go_package = "github.com/myorg/myrepo/gen/addressbook;addressbook";
message Person [id=100] {
string name = 1;
int32 id = 2;
enum PhoneType [id=101] {
PHONE_TYPE_MOBILE = 0;
PHONE_TYPE_HOME = 1;
PHONE_TYPE_WORK = 2;
}
message PhoneNumber [id=102] {
string number = 1;
PhoneType phone_type = 2;
}
list<PhoneNumber> phones = 7;
Animal pet = 8;
}
message Dog [id=104] {
string name = 1;
int32 bark_volume = 2;
}
message Cat [id=105] {
string name = 1;
int32 lives = 2;
}
union Animal [id=106] {
Dog dog = 1;
Cat cat = 2;
}
message AddressBook [id=103] {
list<Person> people = 1;
map<string, Person> people_by_name = 2;
}
```
### `auto_id.fdl` Excerpt
```protobuf
package auto_id;
enum Status {
UNKNOWN = 0;
OK = 1;
}
message Envelope {
string id = 1;
message Payload {
int32 value = 1;
}
union Detail {
Payload payload = 1;
string note = 2;
}
Payload payload = 2;
Detail detail = 3;
Status status = 4;
}
union Wrapper {
Envelope envelope = 1;
string raw = 2;
}
```
## Cross-Language Notes
### Type ID Behavior
- Explicit `[id=...]` values are used directly by generated module installation or registration helpers.
- When type IDs are omitted, generated code uses computed numeric IDs (see `auto_id.*` outputs).
- If `option enable_auto_type_id = false;` is set, generated module installation or registration helpers use name-based APIs instead of numeric IDs.
### Nested Type Shape
| Language | Nested type form |
| --------------------- | ------------------------------ |
| Java | `Person.PhoneNumber` |
| Python | `Person.PhoneNumber` |
| Rust | `person::PhoneNumber` |
| C++ | `Person::PhoneNumber` |
| Go | `Person_PhoneNumber` (default) |
| C# | `Person.PhoneNumber` |
| JavaScript/TypeScript | `Person.PhoneNumber` |
| Swift | `Person.PhoneNumber` |
| Dart | `Person_PhoneNumber` |
| Kotlin | `PersonPhoneNumber` |
| Scala | `Person.PhoneNumber` |
### Byte Helper Naming
| Language | Helpers |
| --------------------- | ------------------------- |
| Java | `toBytes` / `fromBytes` |
| Kotlin | `toBytes` / `fromBytes` |
| Scala | `toBytes` / `fromBytes` |
| Python | `to_bytes` / `from_bytes` |
| Rust | `to_bytes` / `from_bytes` |
| C++ | `to_bytes` / `from_bytes` |
| Go | `ToBytes` / `FromBytes` |
| C# | `ToBytes` / `FromBytes` |
| JavaScript/TypeScript | (via `fory.serialize()`) |
| Swift | `toBytes` / `fromBytes` |
| Dart | (via `fory.serialize()`) |
## Language References
Choose the generated-code reference for the target language. Generated models remain ordinary
language-native types and use the supported Fory serialization APIs for that language.
| Language | Generated-code reference |
| --------------------- | -------------------------------------- |
| Java | [Java](java.md) |
| Python | [Python](python.md) |
| C++ | [C++](cpp.md) |
| Go | [Go](go.md) |
| Rust | [Rust](rust.md) |
| JavaScript/TypeScript | [JavaScript/TypeScript](javascript.md) |
| C# | [C#](csharp.md) |
| Swift | [Swift](swift.md) |
| Dart | [Dart](dart.md) |
| Scala | [Scala](scala.md) |
| Kotlin | [Kotlin](kotlin.md) |