// Generated by alef. Do not edit by hand. // swift-format-ignore-file // This file contains generated FFI glue for trait bridge registration. import Foundation import RustBridge /// Protocol for outbound `OcrBackend` implementations. /// Conform your Swift class or struct to this protocol to implement /// a Rust trait from the host side. public protocol SwiftOcrBackendBridge: AnyObject { func processImage(image_bytes: Data, config: OcrConfig) throws -> String func supportsLanguage(lang: String) -> Bool func backendType() -> OcrBackendType } /// Internal adapter wrapping a `SwiftOcrBackendBridge` conformer. /// Marshals Swift types and trait calls to/from the C boundary. /// Excluded/internal types are serialised to/from JSON strings. final class SwiftOcrBackendAdapter { private let bridge: any SwiftOcrBackendBridge init(bridge: any SwiftOcrBackendBridge) { self.bridge = bridge } func processImageCall(image_bytes: Data, config: OcrConfig) throws -> String { do { let result = try self.bridge.processImage(image_bytes: image_bytes, config: config) let encodedData = try marshal_encode_excluded(result) if let jsonString = String(data: encodedData, encoding: .utf8) { return "{\"ok\": \(jsonString)}" } return "{\"ok\": null}" } catch { return marshal_error_result(error) } } func supportsLanguageCall(lang: String) -> Bool { let result = self.bridge.supportsLanguage(lang: lang) return result } func backendTypeCall() -> OcrBackendType { let result = self.bridge.backendType() return result } } // MARK: - Marshalling helpers private struct Empty: Codable {} private func marshal_ok_result(_ value: T) -> String { let encoder = JSONEncoder() if let data = try? encoder.encode(value), let jsonString = String(data: data, encoding: .utf8) { return "{\"ok\": \(jsonString)}" } return "{\"ok\": null}" } private func marshal_encode_excluded(_ value: T) throws -> Data { let encoder = JSONEncoder() return try encoder.encode(value) } private func marshal_error_result(_ error: any Error) -> String { let errorString = String(describing: error) let encoder = JSONEncoder() if let data = try? encoder.encode(errorString), let jsonString = String(data: data, encoding: .utf8) { return "{\"err\": \(jsonString)}" } return "{\"err\": \"unknown error\"}" }