Basic Serialization
This page covers object graph serialization and core API usage in Swift.
Object Graph Serialization
Use @ForyObject on structs/classes/enums, register types, then serialize and deserialize.
import Foundation
import Fory
@ForyObject
struct Address: Equatable {
var street: String = ""
var zip: Int32 = 0
}
@ForyObject
struct Person: Equatable {
var id: Int64 = 0
var name: String = ""
var nickname: String? = nil
var tags: Set<String> = []
var scores: [Int32] = []
var addresses: [Address] = []
var metadata: [Int8: Int32?] = [:]
}
let fory = Fory()
fory.register(Address.self, id: 100)
fory.register(Person.self, id: 101)
let person = Person(
id: 42,
name: "Alice",
nickname: nil,
tags: ["swift", "xlang"],
scores: [10, 20, 30],
addresses: [Address(street: "Main", zip: 94107)],
metadata: [1: 100, 2: nil]
)
let data = try fory.serialize(person)
let decoded: Person = try fory.deserialize(data)
assert(decoded == person)
Working with Existing Buffers
Append serialized bytes to an existing Data and deserialize from ByteBuffer.
var output = Data()
try fory.serialize(person, to: &output)
let inputBuffer = ByteBuffer(data: output)
let fromBuffer: Person = try fory.deserialize(from: inputBuffer)
assert(fromBuffer == person)
Built-in Supported Types
Primitive and scalar
BoolInt8,Int16,Int32,Int64,IntUInt8,UInt16,UInt32,UInt64,UIntFloat,DoubleStringData
Date and time
DateForyDateForyTimestamp
Collections
[T]whereT: SerializerSet<T>whereT: Serializer & Hashable[K: V]whereK: Serializer & Hashable,V: Serializer- Optional variants (
T?)
Dynamic
AnyAnyObjectany SerializerAnyHashable[Any][String: Any][Int32: Any][AnyHashable: Any]