title: Xlang Serialization sidebar_position: 3 id: xlang_serialization 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
Fory Swift can exchange payloads with other Fory runtimes using the xlang protocol.
let fory = Fory()
@ForyStruct struct Order { var id: Int64 = 0 var amount: Double = 0 } let fory = Fory() fory.register(Order.self, id: 100)
try fory.register(Order.self, namespace: "com.example", name: "Order")
Any, any Serializer)Swift Array<T> fields map to Fory list<T> unless field metadata explicitly requests dense array<T>. Use array<T> only for one-dimensional bool or numeric data.
| Fory schema | Swift field metadata sketch |
|---|---|
list<int32> | @ListField(element: .int32()) var ids: [Int32] |
array<bool> | @ArrayField(element: .bool) var flags: [Bool] |
array<int8> | @ArrayField(element: .int8) var values: [Int8] |
array<int16> | @ArrayField(element: .int16) var values: [Int16] |
array<int32> | @ArrayField(element: .int32()) var values: [Int32] |
array<int64> | @ArrayField(element: .int64()) var values: [Int64] |
array<uint8> | @ArrayField(element: .uint8) var values: [UInt8] |
array<uint16> | @ArrayField(element: .uint16) var values: [UInt16] |
array<uint32> | @ArrayField(element: .uint32()) var values: [UInt32] |
array<uint64> | @ArrayField(element: .uint64()) var values: [UInt64] |
array<float16> | @ArrayField(element: .float16) var values: [Float16] |
array<bfloat16> | @ArrayField(element: .bfloat16) var values: [BFloat16] |
array<float32> | @ArrayField(element: .float32) var values: [Float] |
array<float64> | @ArrayField(element: .float64) var values: [Double] |
Generate Swift models directly from Fory IDL/Proto/FBS inputs:
foryc schema.fdl --swift_out ./Sources/Generated
Generated Swift code includes:
@ForyStruct, @ForyEnum, @ForyUnion, and field/case metadataForyRegistration.register(_:) helpers with transitive import registrationtoBytes / fromBytes helpers on generated typesUse generated registration before xlang serialization:
let fory = Fory(ref: true) try Addressbook.ForyRegistration.register(fory) let payload = try fory.serialize(book) let decoded: Addressbook.AddressBook = try fory.deserialize(payload)
cd integration_tests/idl_tests ./run_swift_tests.sh
This runs Swift roundtrip matrix tests and Java peer roundtrip checks (IDL_PEER_LANG=swift).
Enable debug output when running xlang tests:
ENABLE_FORY_DEBUG_OUTPUT=1 FORY_SWIFT_JAVA_CI=1 mvn -T16 test -Dtest=org.apache.fory.xlang.SwiftXlangTest