import ComposableArchitecture import Foundation import XCTestDynamicOverlay import XXClient public struct UserSearchResultState: Equatable, Identifiable { public init( id: Data, xxContact: XXClient.Contact, username: String? = nil, email: String? = nil, phone: String? = nil ) { self.id = id self.xxContact = xxContact self.username = username self.email = email self.phone = phone } public var id: Data public var xxContact: XXClient.Contact public var username: String? public var email: String? public var phone: String? } public enum UserSearchResultAction: Equatable { case start case tapped } public struct UserSearchResultEnvironment { public init() {} } #if DEBUG extension UserSearchResultEnvironment { public static let unimplemented = UserSearchResultEnvironment() } #endif public let userSearchResultReducer = Reducer<UserSearchResultState, UserSearchResultAction, UserSearchResultEnvironment> { state, action, env in switch action { case .start: state.username = try? state.xxContact.getFact(.username)?.fact state.email = try? state.xxContact.getFact(.email)?.fact state.phone = try? state.xxContact.getFact(.phone)?.fact return .none case .tapped: return .none } }