// // Copyright 2025 Element Creations Ltd. // Copyright 2023-2025 New Vector Ltd. // // SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial. // Please see LICENSE files in the repository root for full details. // import Foundation import MatrixRustSDK final nonisolated class RoomMemberProxy: RoomMemberProxyProtocol { private let member: RoomMember init(member: RoomMember) { self.member = member } var userID: String { member.userId } var displayName: String? { member.displayName } var disambiguatedDisplayName: String? { guard let displayName else { return nil } return member.isNameAmbiguous ? "\(displayName) (\(userID))" : displayName } var avatarURL: URL? { member.avatarUrl.flatMap(URL.init(string:)) } var status: UserStatus { UserStatus(rustStatus: member.status, rustCall: member.call) } var membership: MembershipState { member.membership } var membershipChangeReason: String? { member.membershipChangeReason } var isIgnored: Bool { member.isIgnored } var powerLevel: RoomPowerLevel { .init(rustPowerLevel: member.powerLevel) } // periphery:ignore - might be useful to have var isServiceMember: Bool { member.isServiceMember } }