alef 0.24.13

Opinionated polyglot binding generator for Rust libraries
Documentation
    /// Configure server host and port.
    ///
    /// Creates a ServerConfig with the given host and port,
    /// and applies it to the server via the FFI layer.
    @discardableResult
    public func config(host: String, port: UInt16) throws -> Self {
        guard let inner = inner else { throw ServiceError.invalidHandle }

        // Build ServerConfig JSON with host and port
        let configDict: [String: Any] = [
            "host": host,
            "port": port
        ]
        guard let configData = try? JSONSerialization.data(withJSONObject: configDict, options: []),
              let configJson = String(data: configData, encoding: .utf8) else {
            throw ServiceError.runtime("Failed to serialize server config")
        }

        // Call FFI to create ServerConfig from JSON (null-terminated C string)
        let serverConfig = configJson.withCString { cStr in
            _{{ ffi_prefix }}_server_config_from_json(cStr)
        }
        guard serverConfig != nil else {
            throw ServiceError.runtime("Failed to create ServerConfig from JSON")
        }
        defer {
            // Free the ServerConfig after applying it
            _{{ ffi_prefix }}_server_config_free(serverConfig)
        }

        // Apply the config to the app via the FFI bridge.
        // swift-bridge wraps the opaque `App` type; we need its raw pointer.
        let rawAddr = RustBridge.appRawPtr(inner)
        var innerPtr = OpaquePointer(bitPattern: rawAddr)!
        let _ = _{{ ffi_prefix }}_app_config(&innerPtr, serverConfig)

        return self
    }