// This file was autogenerated by some hot garbage in the `uniffi` crate. // Trust me, you don't want to mess with it! // swiftlint:disable all import Foundation // Depending on the consumer's build setup, the low-level FFI code // might be in a separate module, or it might be compiled inline into // this module. This is a bit of light hackery to work with both. #if canImport(ironstorage_watchFFI) import ironstorage_watchFFI #endif fileprivate extension RustBuffer { // Allocate a new buffer, copying the contents of a `UInt8` array. init(bytes: [UInt8]) { let rbuf = bytes.withUnsafeBufferPointer { ptr in RustBuffer.from(ptr) } self.init(capacity: rbuf.capacity, len: rbuf.len, data: rbuf.data) } static func empty() -> RustBuffer { RustBuffer(capacity: 0, len:0, data: nil) } static func from(_ ptr: UnsafeBufferPointer) -> RustBuffer { try! rustCall { ffi_ironstorage_watch_rustbuffer_from_bytes(ForeignBytes(bufferPointer: ptr), $0) } } // Frees the buffer in place. // The buffer must not be used after this is called. func deallocate() { try! rustCall { ffi_ironstorage_watch_rustbuffer_free(self, $0) } } } fileprivate extension ForeignBytes { init(bufferPointer: UnsafeBufferPointer) { self.init(len: Int32(bufferPointer.count), data: bufferPointer.baseAddress) } init(rawBufferPointer: UnsafeRawBufferPointer) { self.init( len: Int32(rawBufferPointer.count), data: rawBufferPointer.baseAddress?.assumingMemoryBound(to: UInt8.self) ) } } // Converter for `&[u8]` / `[ByRef] bytes` arguments. // // Conforms to `FfiConverter` so the compiler enforces the full converter // method set. Only the scope-bound `lower(_:_body:)` overload is sound — // zero-copy byte buffers only flow foreign -> Rust, and only in argument // position. The four protocol-witness methods (`lift`, `lower`, `read`, // `write`) `fatalError` at runtime if anyone reaches them. // // The scope-bound `lower` takes a closure because the `ForeignBytes` // pointer is only guaranteed valid for the duration of // `Data.withUnsafeBytes`. Callers must run the full FFI call inside // the closure body. fileprivate enum FfiConverterByRefBytes: FfiConverter { typealias SwiftType = Data typealias FfiType = ForeignBytes static func lower(_ value: Data, _ body: (ForeignBytes) throws -> R) rethrows -> R { return try value.withUnsafeBytes { rawBuf in try body(ForeignBytes(rawBufferPointer: rawBuf)) } } static func lower(_ value: Data) -> ForeignBytes { fatalError("ByRef bytes cannot use the plain lower: returning ForeignBytes escapes the Data.withUnsafeBytes scope. Use the scope-bound lower(_:_body:) overload instead.") } static func lift(_ value: ForeignBytes) throws -> Data { fatalError("ByRef bytes cannot be lifted: zero-copy &[u8] only flows foreign->Rust") } static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> Data { fatalError("ByRef bytes cannot be read from a buffer: zero-copy &[u8] is only supported in argument position, not nested in records/options/etc.") } static func write(_ value: Data, into buf: inout [UInt8]) { fatalError("ByRef bytes cannot be written to a buffer: zero-copy &[u8] is only supported in argument position, not nested in records/options/etc.") } } // For every type used in the interface, we provide helper methods for conveniently // lifting and lowering that type from C-compatible data, and for reading and writing // values of that type in a buffer. // Helper classes/extensions that don't change. // Someday, this will be in a library of its own. fileprivate extension Data { init(rustBuffer: RustBuffer) { self.init( bytesNoCopy: rustBuffer.data!, count: Int(rustBuffer.len), deallocator: .none ) } } // Define reader functionality. Normally this would be defined in a class or // struct, but we use standalone functions instead in order to make external // types work. // // With external types, one swift source file needs to be able to call the read // method on another source file's FfiConverter, but then what visibility // should Reader have? // - If Reader is fileprivate, then this means the read() must also // be fileprivate, which doesn't work with external types. // - If Reader is internal/public, we'll get compile errors since both source // files will try define the same type. // // Instead, the read() method and these helper functions input a tuple of data fileprivate func createReader(data: Data) -> (data: Data, offset: Data.Index) { (data: data, offset: 0) } // Reads an integer at the current offset, in big-endian order, and advances // the offset on success. Throws if reading the integer would move the // offset past the end of the buffer. fileprivate func readInt(_ reader: inout (data: Data, offset: Data.Index)) throws -> T { let range = reader.offset...size guard reader.data.count >= range.upperBound else { throw UniffiInternalError.bufferOverflow } if T.self == UInt8.self { let value = reader.data[reader.offset] reader.offset += 1 return value as! T } var value: T = 0 let _ = withUnsafeMutableBytes(of: &value, { reader.data.copyBytes(to: $0, from: range)}) reader.offset = range.upperBound return value.bigEndian } // Reads an arbitrary number of bytes, to be used to read // raw bytes, this is useful when lifting strings fileprivate func readBytes(_ reader: inout (data: Data, offset: Data.Index), count: Int) throws -> Array { let range = reader.offset..<(reader.offset+count) guard reader.data.count >= range.upperBound else { throw UniffiInternalError.bufferOverflow } var value = [UInt8](repeating: 0, count: count) value.withUnsafeMutableBufferPointer({ buffer in reader.data.copyBytes(to: buffer, from: range) }) reader.offset = range.upperBound return value } // Reads a float at the current offset. fileprivate func readFloat(_ reader: inout (data: Data, offset: Data.Index)) throws -> Float { return Float(bitPattern: try readInt(&reader)) } // Reads a float at the current offset. fileprivate func readDouble(_ reader: inout (data: Data, offset: Data.Index)) throws -> Double { return Double(bitPattern: try readInt(&reader)) } // Indicates if the offset has reached the end of the buffer. fileprivate func hasRemaining(_ reader: (data: Data, offset: Data.Index)) -> Bool { return reader.offset < reader.data.count } // Define writer functionality. Normally this would be defined in a class or // struct, but we use standalone functions instead in order to make external // types work. See the above discussion on Readers for details. fileprivate func createWriter() -> [UInt8] { return [] } fileprivate func writeBytes(_ writer: inout [UInt8], _ byteArr: S) where S: Sequence, S.Element == UInt8 { writer.append(contentsOf: byteArr) } // Writes an integer in big-endian order. // // Warning: make sure what you are trying to write // is in the correct type! fileprivate func writeInt(_ writer: inout [UInt8], _ value: T) { var value = value.bigEndian withUnsafeBytes(of: &value) { writer.append(contentsOf: $0) } } fileprivate func writeFloat(_ writer: inout [UInt8], _ value: Float) { writeInt(&writer, value.bitPattern) } fileprivate func writeDouble(_ writer: inout [UInt8], _ value: Double) { writeInt(&writer, value.bitPattern) } // Protocol for types that transfer other types across the FFI. This is // analogous to the Rust trait of the same name. fileprivate protocol FfiConverter { associatedtype FfiType associatedtype SwiftType static func lift(_ value: FfiType) throws -> SwiftType static func lower(_ value: SwiftType) -> FfiType static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> SwiftType static func write(_ value: SwiftType, into buf: inout [UInt8]) } // Types conforming to `Primitive` pass themselves directly over the FFI. fileprivate protocol FfiConverterPrimitive: FfiConverter where FfiType == SwiftType { } extension FfiConverterPrimitive { #if swift(>=5.8) @_documentation(visibility: private) #endif public static func lift(_ value: FfiType) throws -> SwiftType { return value } #if swift(>=5.8) @_documentation(visibility: private) #endif public static func lower(_ value: SwiftType) -> FfiType { return value } } // Types conforming to `FfiConverterRustBuffer` lift and lower into a `RustBuffer`. // Used for complex types where it's hard to write a custom lift/lower. fileprivate protocol FfiConverterRustBuffer: FfiConverter where FfiType == RustBuffer {} extension FfiConverterRustBuffer { #if swift(>=5.8) @_documentation(visibility: private) #endif public static func lift(_ buf: RustBuffer) throws -> SwiftType { var reader = createReader(data: Data(rustBuffer: buf)) let value = try read(from: &reader) if hasRemaining(reader) { throw UniffiInternalError.incompleteData } buf.deallocate() return value } #if swift(>=5.8) @_documentation(visibility: private) #endif public static func lower(_ value: SwiftType) -> RustBuffer { var writer = createWriter() write(value, into: &writer) return RustBuffer(bytes: writer) } } // An error type for FFI errors. These errors occur at the UniFFI level, not // the library level. fileprivate enum UniffiInternalError: LocalizedError { case bufferOverflow case incompleteData case unexpectedOptionalTag case unexpectedEnumCase case unexpectedNullPointer case unexpectedRustCallStatusCode case unexpectedRustCallError case unexpectedStaleHandle case rustPanic(_ message: String) public var errorDescription: String? { switch self { case .bufferOverflow: return "Reading the requested value would read past the end of the buffer" case .incompleteData: return "The buffer still has data after lifting its containing value" case .unexpectedOptionalTag: return "Unexpected optional tag; should be 0 or 1" case .unexpectedEnumCase: return "Raw enum value doesn't match any cases" case .unexpectedNullPointer: return "Raw pointer value was null" case .unexpectedRustCallStatusCode: return "Unexpected RustCallStatus code" case .unexpectedRustCallError: return "CALL_ERROR but no errorClass specified" case .unexpectedStaleHandle: return "The object in the handle map has been dropped already" case let .rustPanic(message): return message } } } fileprivate extension NSLock { func withLock(f: () throws -> T) rethrows -> T { self.lock() defer { self.unlock() } return try f() } } fileprivate let CALL_SUCCESS: Int8 = 0 fileprivate let CALL_ERROR: Int8 = 1 fileprivate let CALL_UNEXPECTED_ERROR: Int8 = 2 fileprivate let CALL_CANCELLED: Int8 = 3 fileprivate extension RustCallStatus { init() { self.init( code: CALL_SUCCESS, errorBuf: RustBuffer.init( capacity: 0, len: 0, data: nil ) ) } } private func rustCall(_ callback: (UnsafeMutablePointer) -> T) throws -> T { let neverThrow: ((RustBuffer) throws -> Never)? = nil return try makeRustCall(callback, errorHandler: neverThrow) } private func rustCallWithError( _ errorHandler: @escaping (RustBuffer) throws -> E, _ callback: (UnsafeMutablePointer) -> T) throws -> T { try makeRustCall(callback, errorHandler: errorHandler) } private func makeRustCall( _ callback: (UnsafeMutablePointer) -> T, errorHandler: ((RustBuffer) throws -> E)? ) throws -> T { uniffiEnsureIronstorageWatchInitialized() var callStatus = RustCallStatus.init() let returnedVal = callback(&callStatus) try uniffiCheckCallStatus(callStatus: callStatus, errorHandler: errorHandler) return returnedVal } private func uniffiCheckCallStatus( callStatus: RustCallStatus, errorHandler: ((RustBuffer) throws -> E)? ) throws { switch callStatus.code { case CALL_SUCCESS: return case CALL_ERROR: if let errorHandler = errorHandler { throw try errorHandler(callStatus.errorBuf) } else { callStatus.errorBuf.deallocate() throw UniffiInternalError.unexpectedRustCallError } case CALL_UNEXPECTED_ERROR: // When the rust code sees a panic, it tries to construct a RustBuffer // with the message. But if that code panics, then it just sends back // an empty buffer. if callStatus.errorBuf.len > 0 { throw UniffiInternalError.rustPanic(try FfiConverterString.lift(callStatus.errorBuf)) } else { callStatus.errorBuf.deallocate() throw UniffiInternalError.rustPanic("Rust panic") } case CALL_CANCELLED: fatalError("Cancellation not supported yet") default: throw UniffiInternalError.unexpectedRustCallStatusCode } } private func uniffiTraitInterfaceCall( callStatus: UnsafeMutablePointer, makeCall: () throws -> T, writeReturn: (T) -> () ) { do { try writeReturn(makeCall()) } catch let error { callStatus.pointee.code = CALL_UNEXPECTED_ERROR callStatus.pointee.errorBuf = FfiConverterString.lower(String(describing: error)) } } private func uniffiTraitInterfaceCallWithError( callStatus: UnsafeMutablePointer, makeCall: () throws -> T, writeReturn: (T) -> (), lowerError: (E) -> RustBuffer ) { do { try writeReturn(makeCall()) } catch let error as E { callStatus.pointee.code = CALL_ERROR callStatus.pointee.errorBuf = lowerError(error) } catch { callStatus.pointee.code = CALL_UNEXPECTED_ERROR callStatus.pointee.errorBuf = FfiConverterString.lower(String(describing: error)) } } // Initial value and increment amount for handles. // These ensure that SWIFT handles always have the lowest bit set fileprivate let UNIFFI_HANDLEMAP_INITIAL: UInt64 = 1 fileprivate let UNIFFI_HANDLEMAP_DELTA: UInt64 = 2 fileprivate final class UniffiHandleMap: @unchecked Sendable { // All mutation happens with this lock held, which is why we implement @unchecked Sendable. private let lock = NSLock() private var map: [UInt64: T] = [:] private var currentHandle: UInt64 = UNIFFI_HANDLEMAP_INITIAL func insert(obj: T) -> UInt64 { lock.withLock { return doInsert(obj) } } // Low-level insert function, this assumes `lock` is held. private func doInsert(_ obj: T) -> UInt64 { let handle = currentHandle currentHandle += UNIFFI_HANDLEMAP_DELTA map[handle] = obj return handle } func get(handle: UInt64) throws -> T { try lock.withLock { guard let obj = map[handle] else { throw UniffiInternalError.unexpectedStaleHandle } return obj } } func clone(handle: UInt64) throws -> UInt64 { try lock.withLock { guard let obj = map[handle] else { throw UniffiInternalError.unexpectedStaleHandle } return doInsert(obj) } } @discardableResult func remove(handle: UInt64) throws -> T { try lock.withLock { guard let obj = map.removeValue(forKey: handle) else { throw UniffiInternalError.unexpectedStaleHandle } return obj } } var count: Int { get { map.count } } } // Public interface members begin here. #if swift(>=5.8) @_documentation(visibility: private) #endif fileprivate struct FfiConverterUInt32: FfiConverterPrimitive { typealias FfiType = UInt32 typealias SwiftType = UInt32 public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> UInt32 { return try lift(readInt(&buf)) } public static func write(_ value: SwiftType, into buf: inout [UInt8]) { writeInt(&buf, lower(value)) } } #if swift(>=5.8) @_documentation(visibility: private) #endif fileprivate struct FfiConverterUInt64: FfiConverterPrimitive { typealias FfiType = UInt64 typealias SwiftType = UInt64 public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> UInt64 { return try lift(readInt(&buf)) } public static func write(_ value: SwiftType, into buf: inout [UInt8]) { writeInt(&buf, lower(value)) } } #if swift(>=5.8) @_documentation(visibility: private) #endif fileprivate struct FfiConverterString: FfiConverter { typealias SwiftType = String typealias FfiType = RustBuffer public static func lift(_ value: RustBuffer) throws -> String { defer { value.deallocate() } if value.data == nil { return String() } let bytes = UnsafeBufferPointer(start: value.data!, count: Int(value.len)) // Use Swift's native UTF-8 decoder; `String(bytes:encoding:.utf8)` goes // through Foundation's NSString and silently strips a leading U+FEFF BOM. // Invalid UTF-8 substitutes U+FFFD instead of trapping (unreachable // given Rust's `String` invariant). return String(decoding: bytes, as: UTF8.self) } public static func lower(_ value: String) -> RustBuffer { return value.utf8CString.withUnsafeBufferPointer { ptr in // The swift string gives us int8_t, we want uint8_t. ptr.withMemoryRebound(to: UInt8.self) { ptr in // The swift string gives us a trailing null byte, we don't want it. let buf = UnsafeBufferPointer(rebasing: ptr.prefix(upTo: ptr.count - 1)) return RustBuffer.from(buf) } } } public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> String { let len: Int32 = try readInt(&buf) // See `lift` above for why we avoid Foundation's NSString-backed decoder here. return String(decoding: try readBytes(&buf, count: Int(len)), as: UTF8.self) } public static func write(_ value: String, into buf: inout [UInt8]) { let len = Int32(value.utf8.count) writeInt(&buf, len) writeBytes(&buf, value.utf8) } } #if swift(>=5.8) @_documentation(visibility: private) #endif fileprivate struct FfiConverterData: FfiConverterRustBuffer { typealias SwiftType = Data public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> Data { let len: Int32 = try readInt(&buf) return Data(try readBytes(&buf, count: Int(len))) } public static func write(_ value: Data, into buf: inout [UInt8]) { let len = Int32(value.count) writeInt(&buf, len) writeBytes(&buf, value) } } public protocol WatchCoreProtocol: AnyObject, Sendable { func applySnapshot(snapshot: Data) throws -> WatchSnapshotUpdate func noPersistedSnapshot() throws func presentationAt(unixSeconds: UInt64) throws -> WatchPresentation func protectedDataUnavailable() throws func syncFailed() throws func syncFinished() throws func syncStarted() throws func syncUnavailable() throws } open class WatchCore: WatchCoreProtocol, @unchecked Sendable { fileprivate let handle: UInt64 /// Used to instantiate a [FFIObject] without an actual handle, for fakes in tests, mostly. #if swift(>=5.8) @_documentation(visibility: private) #endif public struct NoHandle { public init() {} } // TODO: We'd like this to be `private` but for Swifty reasons, // we can't implement `FfiConverter` without making this `required` and we can't // make it `required` without making it `public`. #if swift(>=5.8) @_documentation(visibility: private) #endif required public init(unsafeFromHandle handle: UInt64) { self.handle = handle } // This constructor can be used to instantiate a fake object. // - Parameter noHandle: Placeholder value so we can have a constructor separate from the default empty one that may be implemented for classes extending [FFIObject]. // // - Warning: // Any object instantiated with this constructor cannot be passed to an actual Rust-backed object. Since there isn't a backing handle the FFI lower functions will crash. #if swift(>=5.8) @_documentation(visibility: private) #endif public init(noHandle: NoHandle) { self.handle = 0 } #if swift(>=5.8) @_documentation(visibility: private) #endif public func uniffiCloneHandle() -> UInt64 { return try! rustCall { uniffi_ironstorage_watch_fn_clone_watchcore(self.handle, $0) } } // No primary constructor declared for this class. deinit { if handle == 0 { // Mock objects have handle=0 don't try to free them return } try! rustCall { uniffi_ironstorage_watch_fn_free_watchcore(handle, $0) } } open func applySnapshot(snapshot: Data)throws -> WatchSnapshotUpdate { return try FfiConverterTypeWatchSnapshotUpdate_lift(try rustCallWithError(FfiConverterTypeWatchFfiError_lift) { uniffiCallStatus in uniffi_ironstorage_watch_fn_method_watchcore_apply_snapshot( self.uniffiCloneHandle(), FfiConverterData.lower(snapshot),uniffiCallStatus ) }) } open func noPersistedSnapshot()throws {try rustCallWithError(FfiConverterTypeWatchFfiError_lift) { uniffiCallStatus in uniffi_ironstorage_watch_fn_method_watchcore_no_persisted_snapshot( self.uniffiCloneHandle(),uniffiCallStatus ) } } open func presentationAt(unixSeconds: UInt64)throws -> WatchPresentation { return try FfiConverterTypeWatchPresentation_lift(try rustCallWithError(FfiConverterTypeWatchFfiError_lift) { uniffiCallStatus in uniffi_ironstorage_watch_fn_method_watchcore_presentation_at( self.uniffiCloneHandle(), FfiConverterUInt64.lower(unixSeconds),uniffiCallStatus ) }) } open func protectedDataUnavailable()throws {try rustCallWithError(FfiConverterTypeWatchFfiError_lift) { uniffiCallStatus in uniffi_ironstorage_watch_fn_method_watchcore_protected_data_unavailable( self.uniffiCloneHandle(),uniffiCallStatus ) } } open func syncFailed()throws {try rustCallWithError(FfiConverterTypeWatchFfiError_lift) { uniffiCallStatus in uniffi_ironstorage_watch_fn_method_watchcore_sync_failed( self.uniffiCloneHandle(),uniffiCallStatus ) } } open func syncFinished()throws {try rustCallWithError(FfiConverterTypeWatchFfiError_lift) { uniffiCallStatus in uniffi_ironstorage_watch_fn_method_watchcore_sync_finished( self.uniffiCloneHandle(),uniffiCallStatus ) } } open func syncStarted()throws {try rustCallWithError(FfiConverterTypeWatchFfiError_lift) { uniffiCallStatus in uniffi_ironstorage_watch_fn_method_watchcore_sync_started( self.uniffiCloneHandle(),uniffiCallStatus ) } } open func syncUnavailable()throws {try rustCallWithError(FfiConverterTypeWatchFfiError_lift) { uniffiCallStatus in uniffi_ironstorage_watch_fn_method_watchcore_sync_unavailable( self.uniffiCloneHandle(),uniffiCallStatus ) } } } #if swift(>=5.8) @_documentation(visibility: private) #endif public struct FfiConverterTypeWatchCore: FfiConverter { typealias FfiType = UInt64 typealias SwiftType = WatchCore public static func lift(_ handle: UInt64) throws -> WatchCore { return WatchCore(unsafeFromHandle: handle) } public static func lower(_ value: WatchCore) -> UInt64 { return value.uniffiCloneHandle() } public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> WatchCore { let handle: UInt64 = try readInt(&buf) return try lift(handle) } public static func write(_ value: WatchCore, into buf: inout [UInt8]) { writeInt(&buf, lower(value)) } } #if swift(>=5.8) @_documentation(visibility: private) #endif public func FfiConverterTypeWatchCore_lift(_ handle: UInt64) throws -> WatchCore { return try FfiConverterTypeWatchCore.lift(handle) } #if swift(>=5.8) @_documentation(visibility: private) #endif public func FfiConverterTypeWatchCore_lower(_ value: WatchCore) -> UInt64 { return FfiConverterTypeWatchCore.lower(value) } public struct WatchPresentation: Equatable, Hashable { public var state: WatchPresentationState public var title: String public var detail: String public var records: [WatchTotpRecord] // Default memberwise initializers are never public by default, so we // declare one manually. public init(state: WatchPresentationState, title: String, detail: String, records: [WatchTotpRecord]) { self.state = state self.title = title self.detail = detail self.records = records } } #if compiler(>=6) extension WatchPresentation: Sendable {} #endif #if swift(>=5.8) @_documentation(visibility: private) #endif public struct FfiConverterTypeWatchPresentation: FfiConverterRustBuffer { public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> WatchPresentation { return try WatchPresentation( state: FfiConverterTypeWatchPresentationState.read(from: &buf), title: FfiConverterString.read(from: &buf), detail: FfiConverterString.read(from: &buf), records: FfiConverterSequenceTypeWatchTotpRecord.read(from: &buf) ) } public static func write(_ value: WatchPresentation, into buf: inout [UInt8]) { FfiConverterTypeWatchPresentationState.write(value.state, into: &buf) FfiConverterString.write(value.title, into: &buf) FfiConverterString.write(value.detail, into: &buf) FfiConverterSequenceTypeWatchTotpRecord.write(value.records, into: &buf) } } #if swift(>=5.8) @_documentation(visibility: private) #endif public func FfiConverterTypeWatchPresentation_lift(_ buf: RustBuffer) throws -> WatchPresentation { return try FfiConverterTypeWatchPresentation.lift(buf) } #if swift(>=5.8) @_documentation(visibility: private) #endif public func FfiConverterTypeWatchPresentation_lower(_ value: WatchPresentation) -> RustBuffer { return FfiConverterTypeWatchPresentation.lower(value) } public struct WatchSnapshotUpdate: Equatable, Hashable { public var apply: WatchSnapshotApply public var persistence: WatchPersistenceAction public var revision: UInt64? public var selectedEntries: UInt32 public var receipt: Data // Default memberwise initializers are never public by default, so we // declare one manually. public init(apply: WatchSnapshotApply, persistence: WatchPersistenceAction, revision: UInt64?, selectedEntries: UInt32, receipt: Data) { self.apply = apply self.persistence = persistence self.revision = revision self.selectedEntries = selectedEntries self.receipt = receipt } } #if compiler(>=6) extension WatchSnapshotUpdate: Sendable {} #endif #if swift(>=5.8) @_documentation(visibility: private) #endif public struct FfiConverterTypeWatchSnapshotUpdate: FfiConverterRustBuffer { public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> WatchSnapshotUpdate { return try WatchSnapshotUpdate( apply: FfiConverterTypeWatchSnapshotApply.read(from: &buf), persistence: FfiConverterTypeWatchPersistenceAction.read(from: &buf), revision: FfiConverterOptionUInt64.read(from: &buf), selectedEntries: FfiConverterUInt32.read(from: &buf), receipt: FfiConverterData.read(from: &buf) ) } public static func write(_ value: WatchSnapshotUpdate, into buf: inout [UInt8]) { FfiConverterTypeWatchSnapshotApply.write(value.apply, into: &buf) FfiConverterTypeWatchPersistenceAction.write(value.persistence, into: &buf) FfiConverterOptionUInt64.write(value.revision, into: &buf) FfiConverterUInt32.write(value.selectedEntries, into: &buf) FfiConverterData.write(value.receipt, into: &buf) } } #if swift(>=5.8) @_documentation(visibility: private) #endif public func FfiConverterTypeWatchSnapshotUpdate_lift(_ buf: RustBuffer) throws -> WatchSnapshotUpdate { return try FfiConverterTypeWatchSnapshotUpdate.lift(buf) } #if swift(>=5.8) @_documentation(visibility: private) #endif public func FfiConverterTypeWatchSnapshotUpdate_lower(_ value: WatchSnapshotUpdate) -> RustBuffer { return FfiConverterTypeWatchSnapshotUpdate.lower(value) } public struct WatchTotpRecord: Equatable, Hashable { public var path: String public var issuer: String? public var account: String public var code: String public var period: UInt64 public var validUntil: UInt64 public var remaining: UInt64 // Default memberwise initializers are never public by default, so we // declare one manually. public init(path: String, issuer: String?, account: String, code: String, period: UInt64, validUntil: UInt64, remaining: UInt64) { self.path = path self.issuer = issuer self.account = account self.code = code self.period = period self.validUntil = validUntil self.remaining = remaining } } #if compiler(>=6) extension WatchTotpRecord: Sendable {} #endif #if swift(>=5.8) @_documentation(visibility: private) #endif public struct FfiConverterTypeWatchTotpRecord: FfiConverterRustBuffer { public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> WatchTotpRecord { return try WatchTotpRecord( path: FfiConverterString.read(from: &buf), issuer: FfiConverterOptionString.read(from: &buf), account: FfiConverterString.read(from: &buf), code: FfiConverterString.read(from: &buf), period: FfiConverterUInt64.read(from: &buf), validUntil: FfiConverterUInt64.read(from: &buf), remaining: FfiConverterUInt64.read(from: &buf) ) } public static func write(_ value: WatchTotpRecord, into buf: inout [UInt8]) { FfiConverterString.write(value.path, into: &buf) FfiConverterOptionString.write(value.issuer, into: &buf) FfiConverterString.write(value.account, into: &buf) FfiConverterString.write(value.code, into: &buf) FfiConverterUInt64.write(value.period, into: &buf) FfiConverterUInt64.write(value.validUntil, into: &buf) FfiConverterUInt64.write(value.remaining, into: &buf) } } #if swift(>=5.8) @_documentation(visibility: private) #endif public func FfiConverterTypeWatchTotpRecord_lift(_ buf: RustBuffer) throws -> WatchTotpRecord { return try FfiConverterTypeWatchTotpRecord.lift(buf) } #if swift(>=5.8) @_documentation(visibility: private) #endif public func FfiConverterTypeWatchTotpRecord_lower(_ value: WatchTotpRecord) -> RustBuffer { return FfiConverterTypeWatchTotpRecord.lower(value) } public enum WatchFfiError: Swift.Error, Equatable, Hashable, Foundation.LocalizedError { case Failed(message: String ) public var errorDescription: String? { String(reflecting: self) } } #if compiler(>=6) extension WatchFfiError: Sendable {} #endif #if swift(>=5.8) @_documentation(visibility: private) #endif public struct FfiConverterTypeWatchFfiError: FfiConverterRustBuffer { typealias SwiftType = WatchFfiError public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> WatchFfiError { let variant: Int32 = try readInt(&buf) switch variant { case 1: return .Failed( message: try FfiConverterString.read(from: &buf) ) default: throw UniffiInternalError.unexpectedEnumCase } } public static func write(_ value: WatchFfiError, into buf: inout [UInt8]) { switch value { case let .Failed(message): writeInt(&buf, Int32(1)) FfiConverterString.write(message, into: &buf) } } } #if swift(>=5.8) @_documentation(visibility: private) #endif public func FfiConverterTypeWatchFfiError_lift(_ buf: RustBuffer) throws -> WatchFfiError { return try FfiConverterTypeWatchFfiError.lift(buf) } #if swift(>=5.8) @_documentation(visibility: private) #endif public func FfiConverterTypeWatchFfiError_lower(_ value: WatchFfiError) -> RustBuffer { return FfiConverterTypeWatchFfiError.lower(value) } public enum WatchPersistenceAction: Equatable, Hashable { case keep case replace case delete } #if compiler(>=6) extension WatchPersistenceAction: Sendable {} #endif #if swift(>=5.8) @_documentation(visibility: private) #endif public struct FfiConverterTypeWatchPersistenceAction: FfiConverterRustBuffer { typealias SwiftType = WatchPersistenceAction public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> WatchPersistenceAction { let variant: Int32 = try readInt(&buf) switch variant { case 1: return .keep case 2: return .replace case 3: return .delete default: throw UniffiInternalError.unexpectedEnumCase } } public static func write(_ value: WatchPersistenceAction, into buf: inout [UInt8]) { switch value { case .keep: writeInt(&buf, Int32(1)) case .replace: writeInt(&buf, Int32(2)) case .delete: writeInt(&buf, Int32(3)) } } } #if swift(>=5.8) @_documentation(visibility: private) #endif public func FfiConverterTypeWatchPersistenceAction_lift(_ buf: RustBuffer) throws -> WatchPersistenceAction { return try FfiConverterTypeWatchPersistenceAction.lift(buf) } #if swift(>=5.8) @_documentation(visibility: private) #endif public func FfiConverterTypeWatchPersistenceAction_lower(_ value: WatchPersistenceAction) -> RustBuffer { return FfiConverterTypeWatchPersistenceAction.lower(value) } public enum WatchPresentationState: Equatable, Hashable { case ready case empty case syncing case stale case locked case unavailable case error } #if compiler(>=6) extension WatchPresentationState: Sendable {} #endif #if swift(>=5.8) @_documentation(visibility: private) #endif public struct FfiConverterTypeWatchPresentationState: FfiConverterRustBuffer { typealias SwiftType = WatchPresentationState public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> WatchPresentationState { let variant: Int32 = try readInt(&buf) switch variant { case 1: return .ready case 2: return .empty case 3: return .syncing case 4: return .stale case 5: return .locked case 6: return .unavailable case 7: return .error default: throw UniffiInternalError.unexpectedEnumCase } } public static func write(_ value: WatchPresentationState, into buf: inout [UInt8]) { switch value { case .ready: writeInt(&buf, Int32(1)) case .empty: writeInt(&buf, Int32(2)) case .syncing: writeInt(&buf, Int32(3)) case .stale: writeInt(&buf, Int32(4)) case .locked: writeInt(&buf, Int32(5)) case .unavailable: writeInt(&buf, Int32(6)) case .error: writeInt(&buf, Int32(7)) } } } #if swift(>=5.8) @_documentation(visibility: private) #endif public func FfiConverterTypeWatchPresentationState_lift(_ buf: RustBuffer) throws -> WatchPresentationState { return try FfiConverterTypeWatchPresentationState.lift(buf) } #if swift(>=5.8) @_documentation(visibility: private) #endif public func FfiConverterTypeWatchPresentationState_lower(_ value: WatchPresentationState) -> RustBuffer { return FfiConverterTypeWatchPresentationState.lower(value) } public enum WatchSnapshotApply: Equatable, Hashable { case replaced case revoked case duplicate case stale case pairingChanged } #if compiler(>=6) extension WatchSnapshotApply: Sendable {} #endif #if swift(>=5.8) @_documentation(visibility: private) #endif public struct FfiConverterTypeWatchSnapshotApply: FfiConverterRustBuffer { typealias SwiftType = WatchSnapshotApply public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> WatchSnapshotApply { let variant: Int32 = try readInt(&buf) switch variant { case 1: return .replaced case 2: return .revoked case 3: return .duplicate case 4: return .stale case 5: return .pairingChanged default: throw UniffiInternalError.unexpectedEnumCase } } public static func write(_ value: WatchSnapshotApply, into buf: inout [UInt8]) { switch value { case .replaced: writeInt(&buf, Int32(1)) case .revoked: writeInt(&buf, Int32(2)) case .duplicate: writeInt(&buf, Int32(3)) case .stale: writeInt(&buf, Int32(4)) case .pairingChanged: writeInt(&buf, Int32(5)) } } } #if swift(>=5.8) @_documentation(visibility: private) #endif public func FfiConverterTypeWatchSnapshotApply_lift(_ buf: RustBuffer) throws -> WatchSnapshotApply { return try FfiConverterTypeWatchSnapshotApply.lift(buf) } #if swift(>=5.8) @_documentation(visibility: private) #endif public func FfiConverterTypeWatchSnapshotApply_lower(_ value: WatchSnapshotApply) -> RustBuffer { return FfiConverterTypeWatchSnapshotApply.lower(value) } #if swift(>=5.8) @_documentation(visibility: private) #endif fileprivate struct FfiConverterOptionUInt64: FfiConverterRustBuffer { typealias SwiftType = UInt64? public static func write(_ value: SwiftType, into buf: inout [UInt8]) { guard let value = value else { writeInt(&buf, Int8(0)) return } writeInt(&buf, Int8(1)) FfiConverterUInt64.write(value, into: &buf) } public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> SwiftType { switch try readInt(&buf) as Int8 { case 0: return nil case 1: return try FfiConverterUInt64.read(from: &buf) default: throw UniffiInternalError.unexpectedOptionalTag } } } #if swift(>=5.8) @_documentation(visibility: private) #endif fileprivate struct FfiConverterOptionString: FfiConverterRustBuffer { typealias SwiftType = String? public static func write(_ value: SwiftType, into buf: inout [UInt8]) { guard let value = value else { writeInt(&buf, Int8(0)) return } writeInt(&buf, Int8(1)) FfiConverterString.write(value, into: &buf) } public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> SwiftType { switch try readInt(&buf) as Int8 { case 0: return nil case 1: return try FfiConverterString.read(from: &buf) default: throw UniffiInternalError.unexpectedOptionalTag } } } #if swift(>=5.8) @_documentation(visibility: private) #endif fileprivate struct FfiConverterSequenceTypeWatchTotpRecord: FfiConverterRustBuffer { typealias SwiftType = [WatchTotpRecord] public static func write(_ value: [WatchTotpRecord], into buf: inout [UInt8]) { let len = Int32(value.count) writeInt(&buf, len) for item in value { FfiConverterTypeWatchTotpRecord.write(item, into: &buf) } } public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> [WatchTotpRecord] { let len: Int32 = try readInt(&buf) var seq = [WatchTotpRecord]() seq.reserveCapacity(Int(len)) for _ in 0 ..< len { seq.append(try FfiConverterTypeWatchTotpRecord.read(from: &buf)) } return seq } } public func watchCore() -> WatchCore { return try! FfiConverterTypeWatchCore_lift(try! rustCall() { uniffiCallStatus in uniffi_ironstorage_watch_fn_func_watch_core(uniffiCallStatus ) }) } private enum InitializationResult { case ok case contractVersionMismatch case apiChecksumMismatch } // Use a global variable to perform the versioning checks. Swift ensures that // the code inside is only computed once. private let initializationResult: InitializationResult = { // Get the bindings contract version from our ComponentInterface let bindings_contract_version = 30 // Get the scaffolding contract version by calling the into the dylib let scaffolding_contract_version = ffi_ironstorage_watch_uniffi_contract_version() if bindings_contract_version != scaffolding_contract_version { return InitializationResult.contractVersionMismatch } if (uniffi_ironstorage_watch_checksum_func_watch_core() != 47212) { return InitializationResult.apiChecksumMismatch } if (uniffi_ironstorage_watch_checksum_method_watchcore_apply_snapshot() != 6162) { return InitializationResult.apiChecksumMismatch } if (uniffi_ironstorage_watch_checksum_method_watchcore_no_persisted_snapshot() != 32214) { return InitializationResult.apiChecksumMismatch } if (uniffi_ironstorage_watch_checksum_method_watchcore_presentation_at() != 27053) { return InitializationResult.apiChecksumMismatch } if (uniffi_ironstorage_watch_checksum_method_watchcore_protected_data_unavailable() != 42217) { return InitializationResult.apiChecksumMismatch } if (uniffi_ironstorage_watch_checksum_method_watchcore_sync_failed() != 27399) { return InitializationResult.apiChecksumMismatch } if (uniffi_ironstorage_watch_checksum_method_watchcore_sync_finished() != 42146) { return InitializationResult.apiChecksumMismatch } if (uniffi_ironstorage_watch_checksum_method_watchcore_sync_started() != 37956) { return InitializationResult.apiChecksumMismatch } if (uniffi_ironstorage_watch_checksum_method_watchcore_sync_unavailable() != 38367) { return InitializationResult.apiChecksumMismatch } return InitializationResult.ok }() // Make the ensure init function public so that other modules which have external type references to // our types can call it. public func uniffiEnsureIronstorageWatchInitialized() { switch initializationResult { case .ok: break case .contractVersionMismatch: fatalError("UniFFI contract version mismatch: try cleaning and rebuilding your project") case .apiChecksumMismatch: fatalError("UniFFI API checksum mismatch: try cleaning and rebuilding your project") } } // swiftlint:enable all