l3d-ffi

Crates.iol3d-ffi
lib.rsl3d-ffi
version0.2.3
created_at2025-12-08 19:49:49.59583+00
updated_at2025-12-16 14:29:03.84473+00
descriptionUniFFI bindings for l3d_rs - for Android (Kotlin), iOS (Swift), and more
homepagehttps://github.com/holg/l3d-rs
repositoryhttps://github.com/holg/l3d-rs
max_upload_size
id1974289
size106,703
Holger Trahe (holg)

documentation

https://docs.rs/l3d-ffi

README

l3d-ffi

UniFFI bindings for l3d_rs - L3D luminaire file format parser.

Supported Languages

UniFFI generates native bindings for:

  • Kotlin (Android)
  • Swift (iOS/macOS)
  • Python
  • Ruby

Building

Build the Rust library

cargo build --release -p l3d-ffi

Generate bindings

# Install uniffi-bindgen
cargo install uniffi_bindgen

# Generate Kotlin bindings
uniffi-bindgen generate \
    --library target/release/libl3d_ffi.dylib \
    --language kotlin \
    --out-dir bindings/kotlin

# Generate Swift bindings
uniffi-bindgen generate \
    --library target/release/libl3d_ffi.dylib \
    --language swift \
    --out-dir bindings/swift

For Android

# Add Android targets
rustup target add aarch64-linux-android armv7-linux-androideabi x86_64-linux-android

# Build for Android
cargo build --release -p l3d-ffi --target aarch64-linux-android
cargo build --release -p l3d-ffi --target armv7-linux-androideabi
cargo build --release -p l3d-ffi --target x86_64-linux-android

For iOS

# Add iOS targets
rustup target add aarch64-apple-ios x86_64-apple-ios aarch64-apple-ios-sim

# Build for iOS
cargo build --release -p l3d-ffi --target aarch64-apple-ios
cargo build --release -p l3d-ffi --target aarch64-apple-ios-sim

Usage

Kotlin (Android)

import uniffi.l3d_ffi.*

// Parse from bytes
val l3d = L3dFile(fileBytes)

// Or from file path
val l3d = L3dFile.fromPath("/path/to/file.l3d")

// Get geometry parts
val parts = l3d.getParts()
for (part in parts) {
    println("Part: ${part.path}")
    println("Transform: ${part.transform}")
}

// Get assets (OBJ files, textures)
val assets = l3d.getAssets()

// Convert to JSON
val json = l3d.toJson()

// Get version
val version = version()

Swift (iOS/macOS)

import l3d_ffi

// Parse from bytes
let l3d = try L3dFile(data: fileData)

// Or from file path
let l3d = try L3dFile.fromPath(path: "/path/to/file.l3d")

// Get geometry parts
let parts = l3d.getParts()
for part in parts {
    print("Part: \(part.path)")
    print("Transform: \(part.transform)")
}

// Get assets
let assets = l3d.getAssets()

// Convert to JSON
let json = try l3d.toJson()

// Get version
let ver = version()

API Reference

L3dFile

Main class for parsing and accessing L3D files.

Method Description
L3dFile(data) Parse L3D from byte array
L3dFile.fromPath(path) Parse L3D from file path
getStructureXml() Get raw structure.xml content
toJson() Convert luminaire data to JSON
getParts() Get list of geometry parts
getAssets() Get list of asset files
getPartCount() Number of geometry parts
getAssetCount() Number of asset files

L3dPart

Geometry part with transformation.

Field Type Description
path String Path to OBJ file
transform [Float] 4x4 matrix (16 floats)

L3dAsset

Asset file from the archive.

Field Type Description
name String File path in archive
content Bytes Raw file content

License

MIT OR GPL-3.0-or-later

Commit count: 0

cargo fmt