Navigate password folders on iPhone

This commit is contained in:
2026-08-11 17:30:57 +02:00
parent 8e883f5ccf
commit 3295761bcf
7 changed files with 1144 additions and 5 deletions

View File

@@ -1523,6 +1523,138 @@ public func FfiConverterTypeMobilePage_lower(_ value: MobilePage) -> RustBuffer
}
public struct MobilePasswordPage: Equatable, Hashable {
public var id: String
public var path: String
public var title: String
public var rows: [MobilePasswordRow]
// Default memberwise initializers are never public by default, so we
// declare one manually.
public init(id: String, path: String, title: String, rows: [MobilePasswordRow]) {
self.id = id
self.path = path
self.title = title
self.rows = rows
}
}
#if compiler(>=6)
extension MobilePasswordPage: Sendable {}
#endif
#if swift(>=5.8)
@_documentation(visibility: private)
#endif
public struct FfiConverterTypeMobilePasswordPage: FfiConverterRustBuffer {
public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> MobilePasswordPage {
return
try MobilePasswordPage(
id: FfiConverterString.read(from: &buf),
path: FfiConverterString.read(from: &buf),
title: FfiConverterString.read(from: &buf),
rows: FfiConverterSequenceTypeMobilePasswordRow.read(from: &buf)
)
}
public static func write(_ value: MobilePasswordPage, into buf: inout [UInt8]) {
FfiConverterString.write(value.id, into: &buf)
FfiConverterString.write(value.path, into: &buf)
FfiConverterString.write(value.title, into: &buf)
FfiConverterSequenceTypeMobilePasswordRow.write(value.rows, into: &buf)
}
}
#if swift(>=5.8)
@_documentation(visibility: private)
#endif
public func FfiConverterTypeMobilePasswordPage_lift(_ buf: RustBuffer) throws -> MobilePasswordPage {
return try FfiConverterTypeMobilePasswordPage.lift(buf)
}
#if swift(>=5.8)
@_documentation(visibility: private)
#endif
public func FfiConverterTypeMobilePasswordPage_lower(_ value: MobilePasswordPage) -> RustBuffer {
return FfiConverterTypeMobilePasswordPage.lower(value)
}
public struct MobilePasswordRow: Equatable, Hashable {
public var id: String
public var path: String
public var title: String
public var detail: String
public var systemImage: String
public var kind: MobilePasswordRowKind
// Default memberwise initializers are never public by default, so we
// declare one manually.
public init(id: String, path: String, title: String, detail: String, systemImage: String, kind: MobilePasswordRowKind) {
self.id = id
self.path = path
self.title = title
self.detail = detail
self.systemImage = systemImage
self.kind = kind
}
}
#if compiler(>=6)
extension MobilePasswordRow: Sendable {}
#endif
#if swift(>=5.8)
@_documentation(visibility: private)
#endif
public struct FfiConverterTypeMobilePasswordRow: FfiConverterRustBuffer {
public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> MobilePasswordRow {
return
try MobilePasswordRow(
id: FfiConverterString.read(from: &buf),
path: FfiConverterString.read(from: &buf),
title: FfiConverterString.read(from: &buf),
detail: FfiConverterString.read(from: &buf),
systemImage: FfiConverterString.read(from: &buf),
kind: FfiConverterTypeMobilePasswordRowKind.read(from: &buf)
)
}
public static func write(_ value: MobilePasswordRow, into buf: inout [UInt8]) {
FfiConverterString.write(value.id, into: &buf)
FfiConverterString.write(value.path, into: &buf)
FfiConverterString.write(value.title, into: &buf)
FfiConverterString.write(value.detail, into: &buf)
FfiConverterString.write(value.systemImage, into: &buf)
FfiConverterTypeMobilePasswordRowKind.write(value.kind, into: &buf)
}
}
#if swift(>=5.8)
@_documentation(visibility: private)
#endif
public func FfiConverterTypeMobilePasswordRow_lift(_ buf: RustBuffer) throws -> MobilePasswordRow {
return try FfiConverterTypeMobilePasswordRow.lift(buf)
}
#if swift(>=5.8)
@_documentation(visibility: private)
#endif
public func FfiConverterTypeMobilePasswordRow_lower(_ value: MobilePasswordRow) -> RustBuffer {
return FfiConverterTypeMobilePasswordRow.lower(value)
}
public struct MobileShell: Equatable, Hashable {
public var selectedTab: MobileTab
public var pages: [MobilePage]
@@ -2372,6 +2504,238 @@ public func FfiConverterTypeMobileOnboardingPhase_lower(_ value: MobileOnboardin
public enum MobilePasswordErrorKind: Equatable, Hashable {
case missingConfiguration
case configuration
case invalidPath
case directoryMissing
case repository
}
#if compiler(>=6)
extension MobilePasswordErrorKind: Sendable {}
#endif
#if swift(>=5.8)
@_documentation(visibility: private)
#endif
public struct FfiConverterTypeMobilePasswordErrorKind: FfiConverterRustBuffer {
typealias SwiftType = MobilePasswordErrorKind
public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> MobilePasswordErrorKind {
let variant: Int32 = try readInt(&buf)
switch variant {
case 1: return .missingConfiguration
case 2: return .configuration
case 3: return .invalidPath
case 4: return .directoryMissing
case 5: return .repository
default: throw UniffiInternalError.unexpectedEnumCase
}
}
public static func write(_ value: MobilePasswordErrorKind, into buf: inout [UInt8]) {
switch value {
case .missingConfiguration:
writeInt(&buf, Int32(1))
case .configuration:
writeInt(&buf, Int32(2))
case .invalidPath:
writeInt(&buf, Int32(3))
case .directoryMissing:
writeInt(&buf, Int32(4))
case .repository:
writeInt(&buf, Int32(5))
}
}
}
#if swift(>=5.8)
@_documentation(visibility: private)
#endif
public func FfiConverterTypeMobilePasswordErrorKind_lift(_ buf: RustBuffer) throws -> MobilePasswordErrorKind {
return try FfiConverterTypeMobilePasswordErrorKind.lift(buf)
}
#if swift(>=5.8)
@_documentation(visibility: private)
#endif
public func FfiConverterTypeMobilePasswordErrorKind_lower(_ value: MobilePasswordErrorKind) -> RustBuffer {
return FfiConverterTypeMobilePasswordErrorKind.lower(value)
}
public
enum MobilePasswordFfiError: Swift.Error, Equatable, Hashable, Foundation.LocalizedError {
case Failed(kind: MobilePasswordErrorKind, title: String, detail: String
)
public var errorDescription: String? {
String(reflecting: self)
}
}
#if compiler(>=6)
extension MobilePasswordFfiError: Sendable {}
#endif
#if swift(>=5.8)
@_documentation(visibility: private)
#endif
public struct FfiConverterTypeMobilePasswordFfiError: FfiConverterRustBuffer {
typealias SwiftType = MobilePasswordFfiError
public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> MobilePasswordFfiError {
let variant: Int32 = try readInt(&buf)
switch variant {
case 1: return .Failed(
kind: try FfiConverterTypeMobilePasswordErrorKind.read(from: &buf),
title: try FfiConverterString.read(from: &buf),
detail: try FfiConverterString.read(from: &buf)
)
default: throw UniffiInternalError.unexpectedEnumCase
}
}
public static func write(_ value: MobilePasswordFfiError, into buf: inout [UInt8]) {
switch value {
case let .Failed(kind,title,detail):
writeInt(&buf, Int32(1))
FfiConverterTypeMobilePasswordErrorKind.write(kind, into: &buf)
FfiConverterString.write(title, into: &buf)
FfiConverterString.write(detail, into: &buf)
}
}
}
#if swift(>=5.8)
@_documentation(visibility: private)
#endif
public func FfiConverterTypeMobilePasswordFfiError_lift(_ buf: RustBuffer) throws -> MobilePasswordFfiError {
return try FfiConverterTypeMobilePasswordFfiError.lift(buf)
}
#if swift(>=5.8)
@_documentation(visibility: private)
#endif
public func FfiConverterTypeMobilePasswordFfiError_lower(_ value: MobilePasswordFfiError) -> RustBuffer {
return FfiConverterTypeMobilePasswordFfiError.lower(value)
}
public enum MobilePasswordRowKind: Equatable, Hashable {
case directory
case entry
}
#if compiler(>=6)
extension MobilePasswordRowKind: Sendable {}
#endif
#if swift(>=5.8)
@_documentation(visibility: private)
#endif
public struct FfiConverterTypeMobilePasswordRowKind: FfiConverterRustBuffer {
typealias SwiftType = MobilePasswordRowKind
public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> MobilePasswordRowKind {
let variant: Int32 = try readInt(&buf)
switch variant {
case 1: return .directory
case 2: return .entry
default: throw UniffiInternalError.unexpectedEnumCase
}
}
public static func write(_ value: MobilePasswordRowKind, into buf: inout [UInt8]) {
switch value {
case .directory:
writeInt(&buf, Int32(1))
case .entry:
writeInt(&buf, Int32(2))
}
}
}
#if swift(>=5.8)
@_documentation(visibility: private)
#endif
public func FfiConverterTypeMobilePasswordRowKind_lift(_ buf: RustBuffer) throws -> MobilePasswordRowKind {
return try FfiConverterTypeMobilePasswordRowKind.lift(buf)
}
#if swift(>=5.8)
@_documentation(visibility: private)
#endif
public func FfiConverterTypeMobilePasswordRowKind_lower(_ value: MobilePasswordRowKind) -> RustBuffer {
return FfiConverterTypeMobilePasswordRowKind.lower(value)
}
public
enum MobilePreferenceError: Swift.Error, Equatable, Hashable, Foundation.LocalizedError {
@@ -2637,6 +3001,30 @@ fileprivate struct FfiConverterOptionInt64: FfiConverterRustBuffer {
}
}
#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
@@ -2785,6 +3173,31 @@ fileprivate struct FfiConverterSequenceTypeMobilePage: FfiConverterRustBuffer {
return seq
}
}
#if swift(>=5.8)
@_documentation(visibility: private)
#endif
fileprivate struct FfiConverterSequenceTypeMobilePasswordRow: FfiConverterRustBuffer {
typealias SwiftType = [MobilePasswordRow]
public static func write(_ value: [MobilePasswordRow], into buf: inout [UInt8]) {
let len = Int32(value.count)
writeInt(&buf, len)
for item in value {
FfiConverterTypeMobilePasswordRow.write(item, into: &buf)
}
}
public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> [MobilePasswordRow] {
let len: Int32 = try readInt(&buf)
var seq = [MobilePasswordRow]()
seq.reserveCapacity(Int(len))
for _ in 0 ..< len {
seq.append(try FfiConverterTypeMobilePasswordRow.read(from: &buf))
}
return seq
}
}
public func mobileHomeOperation() -> MobileHomeOperation {
return try! FfiConverterTypeMobileHomeOperation_lift(try! rustCall() {
uniffiCallStatus in
@@ -2803,6 +3216,14 @@ public func mobileOnboardingOperation(serverUrl: String, account: String, reposi
)
})
}
public func mobilePasswordPage(path: String?)throws -> MobilePasswordPage {
return try FfiConverterTypeMobilePasswordPage_lift(try rustCallWithError(FfiConverterTypeMobilePasswordFfiError_lift) {
uniffiCallStatus in
uniffi_ironstorage_apple_fn_func_mobile_password_page(
FfiConverterOptionString.lower(path),uniffiCallStatus
)
})
}
public func mobileShell() -> MobileShell {
return try! FfiConverterTypeMobileShell_lift(try! rustCall() {
uniffiCallStatus in
@@ -2862,6 +3283,9 @@ private let initializationResult: InitializationResult = {
if (uniffi_ironstorage_apple_checksum_func_mobile_onboarding_operation() != 8354) {
return InitializationResult.apiChecksumMismatch
}
if (uniffi_ironstorage_apple_checksum_func_mobile_password_page() != 64312) {
return InitializationResult.apiChecksumMismatch
}
if (uniffi_ironstorage_apple_checksum_func_mobile_shell() != 42687) {
return InitializationResult.apiChecksumMismatch
}