swift-source/all/Generated/push.swift (1,178 lines of code) (raw):

// 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(MozillaRustComponents) import MozillaRustComponents #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<UInt8>) -> RustBuffer { try! rustCall { ffi_push_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_push_rustbuffer_free(self, $0) } } } fileprivate extension ForeignBytes { init(bufferPointer: UnsafeBufferPointer<UInt8>) { self.init(len: Int32(bufferPointer.count), data: bufferPointer.baseAddress) } } // 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<T: FixedWidthInteger>(_ reader: inout (data: Data, offset: Data.Index)) throws -> T { let range = reader.offset..<reader.offset + MemoryLayout<T>.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<UInt8> { 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<S>(_ 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<T: FixedWidthInteger>(_ 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<T>(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<T>(_ callback: (UnsafeMutablePointer<RustCallStatus>) -> T) throws -> T { let neverThrow: ((RustBuffer) throws -> Never)? = nil return try makeRustCall(callback, errorHandler: neverThrow) } private func rustCallWithError<T, E: Swift.Error>( _ errorHandler: @escaping (RustBuffer) throws -> E, _ callback: (UnsafeMutablePointer<RustCallStatus>) -> T) throws -> T { try makeRustCall(callback, errorHandler: errorHandler) } private func makeRustCall<T, E: Swift.Error>( _ callback: (UnsafeMutablePointer<RustCallStatus>) -> T, errorHandler: ((RustBuffer) throws -> E)? ) throws -> T { uniffiEnsurePushInitialized() var callStatus = RustCallStatus.init() let returnedVal = callback(&callStatus) try uniffiCheckCallStatus(callStatus: callStatus, errorHandler: errorHandler) return returnedVal } private func uniffiCheckCallStatus<E: Swift.Error>( 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<T>( callStatus: UnsafeMutablePointer<RustCallStatus>, 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<T, E>( callStatus: UnsafeMutablePointer<RustCallStatus>, 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)) } } fileprivate final class UniffiHandleMap<T>: @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 = 1 func insert(obj: T) -> UInt64 { lock.withLock { let handle = currentHandle currentHandle += 1 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 } } @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 FfiConverterInt8: FfiConverterPrimitive { typealias FfiType = Int8 typealias SwiftType = Int8 public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> Int8 { return try lift(readInt(&buf)) } public static func write(_ value: Int8, 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 FfiConverterBool : FfiConverter { typealias FfiType = Int8 typealias SwiftType = Bool public static func lift(_ value: Int8) throws -> Bool { return value != 0 } public static func lower(_ value: Bool) -> Int8 { return value ? 1 : 0 } public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> Bool { return try lift(readInt(&buf)) } public static func write(_ value: Bool, 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<UInt8>(start: value.data!, count: Int(value.len)) return String(bytes: bytes, encoding: String.Encoding.utf8)! } 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) return String(bytes: try readBytes(&buf, count: Int(len)), encoding: String.Encoding.utf8)! } public static func write(_ value: String, into buf: inout [UInt8]) { let len = Int32(value.utf8.count) writeInt(&buf, len) writeBytes(&buf, value.utf8) } } /** * Object representing the PushManager used to manage subscriptions * * The `PushManager` object is the main interface provided by this crate * it allow consumers to manage push subscriptions. It exposes methods that * interact with the [`autopush server`](https:///autopush.readthedocs.io/en/latest/) * and persists state representing subscriptions. */ public protocol PushManagerProtocol: AnyObject { /** * Decrypts a raw push message. * * This accepts the content of a Push Message (from websocket or via Native Push systems). * # Arguments: * - `payload`: The Push payload as received by the client from Push. * * # Returns * Decrypted message body * * # Errors * Returns an error in the following cases: * - The PushManager does not contain a valid UAID * - There are no records associated with the UAID the [`PushManager`] contains * - An error occurred while decrypting the message * - An error occurred accessing the PushManager's persisted storage */ func decrypt(payload: [String: String]) throws -> DecryptResponse /** * Retrieves an existing push subscription * * # Arguments * - `scope` - Site scope string * * # Returns * A Subscription response that includes the following: * - A URL that can be used to deliver push messages * - A cryptographic key that can be used to encrypt messages * that would then be decrypted using the [`PushManager::decrypt`] function * * # Errors * Returns an error in the following cases: * - PushManager was unable to access its persisted storage * - An error occurred generating or deserializing the cryptographic keys */ func getSubscription(scope: String) throws -> SubscriptionResponse? /** * Subscribes to a new channel and gets the Subscription Info block * * # Arguments * - `scope` - Site scope string * - `server_key` - optional VAPID public key to "lock" subscriptions (defaults to "" for no key) * * # Returns * A Subscription response that includes the following: * - A URL that can be used to deliver push messages * - A cryptographic key that can be used to encrypt messages * that would then be decrypted using the [`PushManager::decrypt`] function * * # Errors * Returns an error in the following cases: * - PushManager was unable to access its persisted storage * - An error occurred sending a subscription request to the autopush server * - An error occurred generating or deserializing the cryptographic keys */ func subscribe(scope: String, appServerSey: String?) throws -> SubscriptionResponse /** * Unsubscribe from given scope, ending that subscription for the user. * * # Arguments * - `scope` - The scope for the channel to remove * * # Returns * Returns a boolean. Boolean is False if the subscription was already * terminated in the past. * * # Errors * Returns an error in the following cases: * - An error occurred sending an unsubscribe request to the autopush server * - An error occurred accessing the PushManager's persisted storage */ func unsubscribe(scope: String) throws -> Bool /** * Unsubscribe all channels for the user * * # Errors * Returns an error in the following cases: * - The PushManager does not contain a valid UAID * - An error occurred sending an unsubscribe request to the autopush server * - An error occurred accessing the PushManager's persisted storage */ func unsubscribeAll() throws /** * Updates the Native OS push registration ID. * * # Arguments: * - `new_token` - the new Native OS push registration ID * * # Errors * Return an error in the following cases: * - The PushManager does not contain a valid UAID * - An error occurred sending an update request to the autopush server * - An error occurred accessing the PushManager's persisted storage */ func update(registrationToken: String) throws /** * Verifies the connection state * * **NOTE**: This does not resubscribe to any channels * it only returns the list of channels that the client should * re-subscribe to. * * # Returns * Returns a list of [`PushSubscriptionChanged`] * indicating the channels the consumer the client should re-subscribe * to. If the list is empty, the client's connection was verified * successfully, and the client does not need to resubscribe * * # Errors * Return an error in the following cases: * - The PushManager does not contain a valid UAID * - An error occurred sending an channel list retrieval request to the autopush server * - An error occurred accessing the PushManager's persisted storage */ func verifyConnection(forceVerify: Bool) throws -> [PushSubscriptionChanged] } /** * Object representing the PushManager used to manage subscriptions * * The `PushManager` object is the main interface provided by this crate * it allow consumers to manage push subscriptions. It exposes methods that * interact with the [`autopush server`](https:///autopush.readthedocs.io/en/latest/) * and persists state representing subscriptions. */ open class PushManager: PushManagerProtocol, @unchecked Sendable { fileprivate let pointer: UnsafeMutableRawPointer! /// Used to instantiate a [FFIObject] without an actual pointer, for fakes in tests, mostly. #if swift(>=5.8) @_documentation(visibility: private) #endif public struct NoPointer { 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`. required public init(unsafeFromRawPointer pointer: UnsafeMutableRawPointer) { self.pointer = pointer } // This constructor can be used to instantiate a fake object. // - Parameter noPointer: 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 [Pointer] the FFI lower functions will crash. #if swift(>=5.8) @_documentation(visibility: private) #endif public init(noPointer: NoPointer) { self.pointer = nil } #if swift(>=5.8) @_documentation(visibility: private) #endif public func uniffiClonePointer() -> UnsafeMutableRawPointer { return try! rustCall { uniffi_push_fn_clone_pushmanager(self.pointer, $0) } } /** * Creates a new [`PushManager`] object, not subscribed to any * channels * * # Arguments * * - `config`: The PushConfiguration for the PushManager * * # Errors * Returns an error in the following cases: * - PushManager is unable to open the `database_path` given */ public convenience init(config: PushConfiguration)throws { let pointer = try rustCallWithError(FfiConverterTypePushApiError_lift) { uniffi_push_fn_constructor_pushmanager_new( FfiConverterTypePushConfiguration_lower(config),$0 ) } self.init(unsafeFromRawPointer: pointer) } deinit { guard let pointer = pointer else { return } try! rustCall { uniffi_push_fn_free_pushmanager(pointer, $0) } } /** * Decrypts a raw push message. * * This accepts the content of a Push Message (from websocket or via Native Push systems). * # Arguments: * - `payload`: The Push payload as received by the client from Push. * * # Returns * Decrypted message body * * # Errors * Returns an error in the following cases: * - The PushManager does not contain a valid UAID * - There are no records associated with the UAID the [`PushManager`] contains * - An error occurred while decrypting the message * - An error occurred accessing the PushManager's persisted storage */ open func decrypt(payload: [String: String])throws -> DecryptResponse { return try FfiConverterTypeDecryptResponse_lift(try rustCallWithError(FfiConverterTypePushApiError_lift) { uniffi_push_fn_method_pushmanager_decrypt(self.uniffiClonePointer(), FfiConverterDictionaryStringString.lower(payload),$0 ) }) } /** * Retrieves an existing push subscription * * # Arguments * - `scope` - Site scope string * * # Returns * A Subscription response that includes the following: * - A URL that can be used to deliver push messages * - A cryptographic key that can be used to encrypt messages * that would then be decrypted using the [`PushManager::decrypt`] function * * # Errors * Returns an error in the following cases: * - PushManager was unable to access its persisted storage * - An error occurred generating or deserializing the cryptographic keys */ open func getSubscription(scope: String)throws -> SubscriptionResponse? { return try FfiConverterOptionTypeSubscriptionResponse.lift(try rustCallWithError(FfiConverterTypePushApiError_lift) { uniffi_push_fn_method_pushmanager_get_subscription(self.uniffiClonePointer(), FfiConverterString.lower(scope),$0 ) }) } /** * Subscribes to a new channel and gets the Subscription Info block * * # Arguments * - `scope` - Site scope string * - `server_key` - optional VAPID public key to "lock" subscriptions (defaults to "" for no key) * * # Returns * A Subscription response that includes the following: * - A URL that can be used to deliver push messages * - A cryptographic key that can be used to encrypt messages * that would then be decrypted using the [`PushManager::decrypt`] function * * # Errors * Returns an error in the following cases: * - PushManager was unable to access its persisted storage * - An error occurred sending a subscription request to the autopush server * - An error occurred generating or deserializing the cryptographic keys */ open func subscribe(scope: String, appServerSey: String? = nil)throws -> SubscriptionResponse { return try FfiConverterTypeSubscriptionResponse_lift(try rustCallWithError(FfiConverterTypePushApiError_lift) { uniffi_push_fn_method_pushmanager_subscribe(self.uniffiClonePointer(), FfiConverterString.lower(scope), FfiConverterOptionString.lower(appServerSey),$0 ) }) } /** * Unsubscribe from given scope, ending that subscription for the user. * * # Arguments * - `scope` - The scope for the channel to remove * * # Returns * Returns a boolean. Boolean is False if the subscription was already * terminated in the past. * * # Errors * Returns an error in the following cases: * - An error occurred sending an unsubscribe request to the autopush server * - An error occurred accessing the PushManager's persisted storage */ open func unsubscribe(scope: String)throws -> Bool { return try FfiConverterBool.lift(try rustCallWithError(FfiConverterTypePushApiError_lift) { uniffi_push_fn_method_pushmanager_unsubscribe(self.uniffiClonePointer(), FfiConverterString.lower(scope),$0 ) }) } /** * Unsubscribe all channels for the user * * # Errors * Returns an error in the following cases: * - The PushManager does not contain a valid UAID * - An error occurred sending an unsubscribe request to the autopush server * - An error occurred accessing the PushManager's persisted storage */ open func unsubscribeAll()throws {try rustCallWithError(FfiConverterTypePushApiError_lift) { uniffi_push_fn_method_pushmanager_unsubscribe_all(self.uniffiClonePointer(),$0 ) } } /** * Updates the Native OS push registration ID. * * # Arguments: * - `new_token` - the new Native OS push registration ID * * # Errors * Return an error in the following cases: * - The PushManager does not contain a valid UAID * - An error occurred sending an update request to the autopush server * - An error occurred accessing the PushManager's persisted storage */ open func update(registrationToken: String)throws {try rustCallWithError(FfiConverterTypePushApiError_lift) { uniffi_push_fn_method_pushmanager_update(self.uniffiClonePointer(), FfiConverterString.lower(registrationToken),$0 ) } } /** * Verifies the connection state * * **NOTE**: This does not resubscribe to any channels * it only returns the list of channels that the client should * re-subscribe to. * * # Returns * Returns a list of [`PushSubscriptionChanged`] * indicating the channels the consumer the client should re-subscribe * to. If the list is empty, the client's connection was verified * successfully, and the client does not need to resubscribe * * # Errors * Return an error in the following cases: * - The PushManager does not contain a valid UAID * - An error occurred sending an channel list retrieval request to the autopush server * - An error occurred accessing the PushManager's persisted storage */ open func verifyConnection(forceVerify: Bool = false)throws -> [PushSubscriptionChanged] { return try FfiConverterSequenceTypePushSubscriptionChanged.lift(try rustCallWithError(FfiConverterTypePushApiError_lift) { uniffi_push_fn_method_pushmanager_verify_connection(self.uniffiClonePointer(), FfiConverterBool.lower(forceVerify),$0 ) }) } } #if swift(>=5.8) @_documentation(visibility: private) #endif public struct FfiConverterTypePushManager: FfiConverter { typealias FfiType = UnsafeMutableRawPointer typealias SwiftType = PushManager public static func lift(_ pointer: UnsafeMutableRawPointer) throws -> PushManager { return PushManager(unsafeFromRawPointer: pointer) } public static func lower(_ value: PushManager) -> UnsafeMutableRawPointer { return value.uniffiClonePointer() } public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> PushManager { let v: UInt64 = try readInt(&buf) // The Rust code won't compile if a pointer won't fit in a UInt64. // We have to go via `UInt` because that's the thing that's the size of a pointer. let ptr = UnsafeMutableRawPointer(bitPattern: UInt(truncatingIfNeeded: v)) if (ptr == nil) { throw UniffiInternalError.unexpectedNullPointer } return try lift(ptr!) } public static func write(_ value: PushManager, into buf: inout [UInt8]) { // This fiddling is because `Int` is the thing that's the same size as a pointer. // The Rust code won't compile if a pointer won't fit in a `UInt64`. writeInt(&buf, UInt64(bitPattern: Int64(Int(bitPattern: lower(value))))) } } #if swift(>=5.8) @_documentation(visibility: private) #endif public func FfiConverterTypePushManager_lift(_ pointer: UnsafeMutableRawPointer) throws -> PushManager { return try FfiConverterTypePushManager.lift(pointer) } #if swift(>=5.8) @_documentation(visibility: private) #endif public func FfiConverterTypePushManager_lower(_ value: PushManager) -> UnsafeMutableRawPointer { return FfiConverterTypePushManager.lower(value) } public struct DecryptResponse { public var result: [Int8] public var scope: String // Default memberwise initializers are never public by default, so we // declare one manually. public init(result: [Int8], scope: String) { self.result = result self.scope = scope } } #if compiler(>=6) extension DecryptResponse: Sendable {} #endif extension DecryptResponse: Equatable, Hashable { public static func ==(lhs: DecryptResponse, rhs: DecryptResponse) -> Bool { if lhs.result != rhs.result { return false } if lhs.scope != rhs.scope { return false } return true } public func hash(into hasher: inout Hasher) { hasher.combine(result) hasher.combine(scope) } } #if swift(>=5.8) @_documentation(visibility: private) #endif public struct FfiConverterTypeDecryptResponse: FfiConverterRustBuffer { public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> DecryptResponse { return try DecryptResponse( result: FfiConverterSequenceInt8.read(from: &buf), scope: FfiConverterString.read(from: &buf) ) } public static func write(_ value: DecryptResponse, into buf: inout [UInt8]) { FfiConverterSequenceInt8.write(value.result, into: &buf) FfiConverterString.write(value.scope, into: &buf) } } #if swift(>=5.8) @_documentation(visibility: private) #endif public func FfiConverterTypeDecryptResponse_lift(_ buf: RustBuffer) throws -> DecryptResponse { return try FfiConverterTypeDecryptResponse.lift(buf) } #if swift(>=5.8) @_documentation(visibility: private) #endif public func FfiConverterTypeDecryptResponse_lower(_ value: DecryptResponse) -> RustBuffer { return FfiConverterTypeDecryptResponse.lower(value) } /** * Key Information that can be used to encrypt payloads */ public struct KeyInfo { public var auth: String public var p256dh: String // Default memberwise initializers are never public by default, so we // declare one manually. public init(auth: String, p256dh: String) { self.auth = auth self.p256dh = p256dh } } #if compiler(>=6) extension KeyInfo: Sendable {} #endif extension KeyInfo: Equatable, Hashable { public static func ==(lhs: KeyInfo, rhs: KeyInfo) -> Bool { if lhs.auth != rhs.auth { return false } if lhs.p256dh != rhs.p256dh { return false } return true } public func hash(into hasher: inout Hasher) { hasher.combine(auth) hasher.combine(p256dh) } } #if swift(>=5.8) @_documentation(visibility: private) #endif public struct FfiConverterTypeKeyInfo: FfiConverterRustBuffer { public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> KeyInfo { return try KeyInfo( auth: FfiConverterString.read(from: &buf), p256dh: FfiConverterString.read(from: &buf) ) } public static func write(_ value: KeyInfo, into buf: inout [UInt8]) { FfiConverterString.write(value.auth, into: &buf) FfiConverterString.write(value.p256dh, into: &buf) } } #if swift(>=5.8) @_documentation(visibility: private) #endif public func FfiConverterTypeKeyInfo_lift(_ buf: RustBuffer) throws -> KeyInfo { return try FfiConverterTypeKeyInfo.lift(buf) } #if swift(>=5.8) @_documentation(visibility: private) #endif public func FfiConverterTypeKeyInfo_lower(_ value: KeyInfo) -> RustBuffer { return FfiConverterTypeKeyInfo.lower(value) } public struct PushConfiguration { public var serverHost: String public var httpProtocol: PushHttpProtocol public var bridgeType: BridgeType public var senderId: String public var databasePath: String public var verifyConnectionRateLimiter: UInt64? // Default memberwise initializers are never public by default, so we // declare one manually. public init(serverHost: String, httpProtocol: PushHttpProtocol, bridgeType: BridgeType, senderId: String, databasePath: String, verifyConnectionRateLimiter: UInt64?) { self.serverHost = serverHost self.httpProtocol = httpProtocol self.bridgeType = bridgeType self.senderId = senderId self.databasePath = databasePath self.verifyConnectionRateLimiter = verifyConnectionRateLimiter } } #if compiler(>=6) extension PushConfiguration: Sendable {} #endif extension PushConfiguration: Equatable, Hashable { public static func ==(lhs: PushConfiguration, rhs: PushConfiguration) -> Bool { if lhs.serverHost != rhs.serverHost { return false } if lhs.httpProtocol != rhs.httpProtocol { return false } if lhs.bridgeType != rhs.bridgeType { return false } if lhs.senderId != rhs.senderId { return false } if lhs.databasePath != rhs.databasePath { return false } if lhs.verifyConnectionRateLimiter != rhs.verifyConnectionRateLimiter { return false } return true } public func hash(into hasher: inout Hasher) { hasher.combine(serverHost) hasher.combine(httpProtocol) hasher.combine(bridgeType) hasher.combine(senderId) hasher.combine(databasePath) hasher.combine(verifyConnectionRateLimiter) } } #if swift(>=5.8) @_documentation(visibility: private) #endif public struct FfiConverterTypePushConfiguration: FfiConverterRustBuffer { public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> PushConfiguration { return try PushConfiguration( serverHost: FfiConverterString.read(from: &buf), httpProtocol: FfiConverterTypePushHttpProtocol.read(from: &buf), bridgeType: FfiConverterTypeBridgeType.read(from: &buf), senderId: FfiConverterString.read(from: &buf), databasePath: FfiConverterString.read(from: &buf), verifyConnectionRateLimiter: FfiConverterOptionUInt64.read(from: &buf) ) } public static func write(_ value: PushConfiguration, into buf: inout [UInt8]) { FfiConverterString.write(value.serverHost, into: &buf) FfiConverterTypePushHttpProtocol.write(value.httpProtocol, into: &buf) FfiConverterTypeBridgeType.write(value.bridgeType, into: &buf) FfiConverterString.write(value.senderId, into: &buf) FfiConverterString.write(value.databasePath, into: &buf) FfiConverterOptionUInt64.write(value.verifyConnectionRateLimiter, into: &buf) } } #if swift(>=5.8) @_documentation(visibility: private) #endif public func FfiConverterTypePushConfiguration_lift(_ buf: RustBuffer) throws -> PushConfiguration { return try FfiConverterTypePushConfiguration.lift(buf) } #if swift(>=5.8) @_documentation(visibility: private) #endif public func FfiConverterTypePushConfiguration_lower(_ value: PushConfiguration) -> RustBuffer { return FfiConverterTypePushConfiguration.lower(value) } /** * An dictionary describing the push subscription that changed, the caller * will receive a list of [`PushSubscriptionChanged`] when calling * [`PushManager::verify_connection`], one entry for each channel that the * caller should resubscribe to */ public struct PushSubscriptionChanged { public var channelId: String public var scope: String // Default memberwise initializers are never public by default, so we // declare one manually. public init(channelId: String, scope: String) { self.channelId = channelId self.scope = scope } } #if compiler(>=6) extension PushSubscriptionChanged: Sendable {} #endif extension PushSubscriptionChanged: Equatable, Hashable { public static func ==(lhs: PushSubscriptionChanged, rhs: PushSubscriptionChanged) -> Bool { if lhs.channelId != rhs.channelId { return false } if lhs.scope != rhs.scope { return false } return true } public func hash(into hasher: inout Hasher) { hasher.combine(channelId) hasher.combine(scope) } } #if swift(>=5.8) @_documentation(visibility: private) #endif public struct FfiConverterTypePushSubscriptionChanged: FfiConverterRustBuffer { public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> PushSubscriptionChanged { return try PushSubscriptionChanged( channelId: FfiConverterString.read(from: &buf), scope: FfiConverterString.read(from: &buf) ) } public static func write(_ value: PushSubscriptionChanged, into buf: inout [UInt8]) { FfiConverterString.write(value.channelId, into: &buf) FfiConverterString.write(value.scope, into: &buf) } } #if swift(>=5.8) @_documentation(visibility: private) #endif public func FfiConverterTypePushSubscriptionChanged_lift(_ buf: RustBuffer) throws -> PushSubscriptionChanged { return try FfiConverterTypePushSubscriptionChanged.lift(buf) } #if swift(>=5.8) @_documentation(visibility: private) #endif public func FfiConverterTypePushSubscriptionChanged_lower(_ value: PushSubscriptionChanged) -> RustBuffer { return FfiConverterTypePushSubscriptionChanged.lower(value) } /** * Subscription Information, the endpoint to send push messages to and * the key information that can be used to encrypt payloads */ public struct SubscriptionInfo { public var endpoint: String public var keys: KeyInfo // Default memberwise initializers are never public by default, so we // declare one manually. public init(endpoint: String, keys: KeyInfo) { self.endpoint = endpoint self.keys = keys } } #if compiler(>=6) extension SubscriptionInfo: Sendable {} #endif extension SubscriptionInfo: Equatable, Hashable { public static func ==(lhs: SubscriptionInfo, rhs: SubscriptionInfo) -> Bool { if lhs.endpoint != rhs.endpoint { return false } if lhs.keys != rhs.keys { return false } return true } public func hash(into hasher: inout Hasher) { hasher.combine(endpoint) hasher.combine(keys) } } #if swift(>=5.8) @_documentation(visibility: private) #endif public struct FfiConverterTypeSubscriptionInfo: FfiConverterRustBuffer { public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> SubscriptionInfo { return try SubscriptionInfo( endpoint: FfiConverterString.read(from: &buf), keys: FfiConverterTypeKeyInfo.read(from: &buf) ) } public static func write(_ value: SubscriptionInfo, into buf: inout [UInt8]) { FfiConverterString.write(value.endpoint, into: &buf) FfiConverterTypeKeyInfo.write(value.keys, into: &buf) } } #if swift(>=5.8) @_documentation(visibility: private) #endif public func FfiConverterTypeSubscriptionInfo_lift(_ buf: RustBuffer) throws -> SubscriptionInfo { return try FfiConverterTypeSubscriptionInfo.lift(buf) } #if swift(>=5.8) @_documentation(visibility: private) #endif public func FfiConverterTypeSubscriptionInfo_lower(_ value: SubscriptionInfo) -> RustBuffer { return FfiConverterTypeSubscriptionInfo.lower(value) } /** * The subscription response object returned from [`PushManager::subscribe`] */ public struct SubscriptionResponse { public var channelId: String public var subscriptionInfo: SubscriptionInfo // Default memberwise initializers are never public by default, so we // declare one manually. public init(channelId: String, subscriptionInfo: SubscriptionInfo) { self.channelId = channelId self.subscriptionInfo = subscriptionInfo } } #if compiler(>=6) extension SubscriptionResponse: Sendable {} #endif extension SubscriptionResponse: Equatable, Hashable { public static func ==(lhs: SubscriptionResponse, rhs: SubscriptionResponse) -> Bool { if lhs.channelId != rhs.channelId { return false } if lhs.subscriptionInfo != rhs.subscriptionInfo { return false } return true } public func hash(into hasher: inout Hasher) { hasher.combine(channelId) hasher.combine(subscriptionInfo) } } #if swift(>=5.8) @_documentation(visibility: private) #endif public struct FfiConverterTypeSubscriptionResponse: FfiConverterRustBuffer { public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> SubscriptionResponse { return try SubscriptionResponse( channelId: FfiConverterString.read(from: &buf), subscriptionInfo: FfiConverterTypeSubscriptionInfo.read(from: &buf) ) } public static func write(_ value: SubscriptionResponse, into buf: inout [UInt8]) { FfiConverterString.write(value.channelId, into: &buf) FfiConverterTypeSubscriptionInfo.write(value.subscriptionInfo, into: &buf) } } #if swift(>=5.8) @_documentation(visibility: private) #endif public func FfiConverterTypeSubscriptionResponse_lift(_ buf: RustBuffer) throws -> SubscriptionResponse { return try FfiConverterTypeSubscriptionResponse.lift(buf) } #if swift(>=5.8) @_documentation(visibility: private) #endif public func FfiConverterTypeSubscriptionResponse_lower(_ value: SubscriptionResponse) -> RustBuffer { return FfiConverterTypeSubscriptionResponse.lower(value) } // Note that we don't yet support `indirect` for enums. // See https://github.com/mozilla/uniffi-rs/issues/396 for further discussion. /** * The types of supported native bridges. * * FCM = Google Android Firebase Cloud Messaging * ADM = Amazon Device Messaging for FireTV * APNS = Apple Push Notification System for iOS * * Please contact services back-end for any additional bridge protocols. */ public enum BridgeType { case fcm case adm case apns } #if compiler(>=6) extension BridgeType: Sendable {} #endif #if swift(>=5.8) @_documentation(visibility: private) #endif public struct FfiConverterTypeBridgeType: FfiConverterRustBuffer { typealias SwiftType = BridgeType public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> BridgeType { let variant: Int32 = try readInt(&buf) switch variant { case 1: return .fcm case 2: return .adm case 3: return .apns default: throw UniffiInternalError.unexpectedEnumCase } } public static func write(_ value: BridgeType, into buf: inout [UInt8]) { switch value { case .fcm: writeInt(&buf, Int32(1)) case .adm: writeInt(&buf, Int32(2)) case .apns: writeInt(&buf, Int32(3)) } } } #if swift(>=5.8) @_documentation(visibility: private) #endif public func FfiConverterTypeBridgeType_lift(_ buf: RustBuffer) throws -> BridgeType { return try FfiConverterTypeBridgeType.lift(buf) } #if swift(>=5.8) @_documentation(visibility: private) #endif public func FfiConverterTypeBridgeType_lower(_ value: BridgeType) -> RustBuffer { return FfiConverterTypeBridgeType.lower(value) } extension BridgeType: Equatable, Hashable {} /** * The main Error returned from the Push component, each * variant describes a different error */ public enum PushApiError { case UaidNotRecognizedError(message: String) case RecordNotFoundError(message: String) case InternalError(message: String) } #if swift(>=5.8) @_documentation(visibility: private) #endif public struct FfiConverterTypePushApiError: FfiConverterRustBuffer { typealias SwiftType = PushApiError public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> PushApiError { let variant: Int32 = try readInt(&buf) switch variant { case 1: return .UaidNotRecognizedError( message: try FfiConverterString.read(from: &buf) ) case 2: return .RecordNotFoundError( message: try FfiConverterString.read(from: &buf) ) case 3: return .InternalError( message: try FfiConverterString.read(from: &buf) ) default: throw UniffiInternalError.unexpectedEnumCase } } public static func write(_ value: PushApiError, into buf: inout [UInt8]) { switch value { case .UaidNotRecognizedError(_ /* message is ignored*/): writeInt(&buf, Int32(1)) case .RecordNotFoundError(_ /* message is ignored*/): writeInt(&buf, Int32(2)) case .InternalError(_ /* message is ignored*/): writeInt(&buf, Int32(3)) } } } #if swift(>=5.8) @_documentation(visibility: private) #endif public func FfiConverterTypePushApiError_lift(_ buf: RustBuffer) throws -> PushApiError { return try FfiConverterTypePushApiError.lift(buf) } #if swift(>=5.8) @_documentation(visibility: private) #endif public func FfiConverterTypePushApiError_lower(_ value: PushApiError) -> RustBuffer { return FfiConverterTypePushApiError.lower(value) } extension PushApiError: Equatable, Hashable {} extension PushApiError: Foundation.LocalizedError { public var errorDescription: String? { String(reflecting: self) } } // Note that we don't yet support `indirect` for enums. // See https://github.com/mozilla/uniffi-rs/issues/396 for further discussion. /** * Supported protocols for push * "Https" is default, and "Http" is only * supported for tests */ public enum PushHttpProtocol { case https case http } #if compiler(>=6) extension PushHttpProtocol: Sendable {} #endif #if swift(>=5.8) @_documentation(visibility: private) #endif public struct FfiConverterTypePushHttpProtocol: FfiConverterRustBuffer { typealias SwiftType = PushHttpProtocol public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> PushHttpProtocol { let variant: Int32 = try readInt(&buf) switch variant { case 1: return .https case 2: return .http default: throw UniffiInternalError.unexpectedEnumCase } } public static func write(_ value: PushHttpProtocol, into buf: inout [UInt8]) { switch value { case .https: writeInt(&buf, Int32(1)) case .http: writeInt(&buf, Int32(2)) } } } #if swift(>=5.8) @_documentation(visibility: private) #endif public func FfiConverterTypePushHttpProtocol_lift(_ buf: RustBuffer) throws -> PushHttpProtocol { return try FfiConverterTypePushHttpProtocol.lift(buf) } #if swift(>=5.8) @_documentation(visibility: private) #endif public func FfiConverterTypePushHttpProtocol_lower(_ value: PushHttpProtocol) -> RustBuffer { return FfiConverterTypePushHttpProtocol.lower(value) } extension PushHttpProtocol: Equatable, Hashable {} #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 FfiConverterOptionTypeSubscriptionResponse: FfiConverterRustBuffer { typealias SwiftType = SubscriptionResponse? public static func write(_ value: SwiftType, into buf: inout [UInt8]) { guard let value = value else { writeInt(&buf, Int8(0)) return } writeInt(&buf, Int8(1)) FfiConverterTypeSubscriptionResponse.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 FfiConverterTypeSubscriptionResponse.read(from: &buf) default: throw UniffiInternalError.unexpectedOptionalTag } } } #if swift(>=5.8) @_documentation(visibility: private) #endif fileprivate struct FfiConverterSequenceInt8: FfiConverterRustBuffer { typealias SwiftType = [Int8] public static func write(_ value: [Int8], into buf: inout [UInt8]) { let len = Int32(value.count) writeInt(&buf, len) for item in value { FfiConverterInt8.write(item, into: &buf) } } public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> [Int8] { let len: Int32 = try readInt(&buf) var seq = [Int8]() seq.reserveCapacity(Int(len)) for _ in 0 ..< len { seq.append(try FfiConverterInt8.read(from: &buf)) } return seq } } #if swift(>=5.8) @_documentation(visibility: private) #endif fileprivate struct FfiConverterSequenceTypePushSubscriptionChanged: FfiConverterRustBuffer { typealias SwiftType = [PushSubscriptionChanged] public static func write(_ value: [PushSubscriptionChanged], into buf: inout [UInt8]) { let len = Int32(value.count) writeInt(&buf, len) for item in value { FfiConverterTypePushSubscriptionChanged.write(item, into: &buf) } } public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> [PushSubscriptionChanged] { let len: Int32 = try readInt(&buf) var seq = [PushSubscriptionChanged]() seq.reserveCapacity(Int(len)) for _ in 0 ..< len { seq.append(try FfiConverterTypePushSubscriptionChanged.read(from: &buf)) } return seq } } #if swift(>=5.8) @_documentation(visibility: private) #endif fileprivate struct FfiConverterDictionaryStringString: FfiConverterRustBuffer { public static func write(_ value: [String: String], into buf: inout [UInt8]) { let len = Int32(value.count) writeInt(&buf, len) for (key, value) in value { FfiConverterString.write(key, into: &buf) FfiConverterString.write(value, into: &buf) } } public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> [String: String] { let len: Int32 = try readInt(&buf) var dict = [String: String]() dict.reserveCapacity(Int(len)) for _ in 0..<len { let key = try FfiConverterString.read(from: &buf) let value = try FfiConverterString.read(from: &buf) dict[key] = value } return dict } } 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 = 29 // Get the scaffolding contract version by calling the into the dylib let scaffolding_contract_version = ffi_push_uniffi_contract_version() if bindings_contract_version != scaffolding_contract_version { return InitializationResult.contractVersionMismatch } if (uniffi_push_checksum_method_pushmanager_decrypt() != 37159) { return InitializationResult.apiChecksumMismatch } if (uniffi_push_checksum_method_pushmanager_get_subscription() != 33736) { return InitializationResult.apiChecksumMismatch } if (uniffi_push_checksum_method_pushmanager_subscribe() != 22482) { return InitializationResult.apiChecksumMismatch } if (uniffi_push_checksum_method_pushmanager_unsubscribe() != 2365) { return InitializationResult.apiChecksumMismatch } if (uniffi_push_checksum_method_pushmanager_unsubscribe_all() != 12972) { return InitializationResult.apiChecksumMismatch } if (uniffi_push_checksum_method_pushmanager_update() != 17445) { return InitializationResult.apiChecksumMismatch } if (uniffi_push_checksum_method_pushmanager_verify_connection() != 64398) { return InitializationResult.apiChecksumMismatch } if (uniffi_push_checksum_constructor_pushmanager_new() != 17838) { 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 uniffiEnsurePushInitialized() { 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