import Foundation import Utils public struct UserProfile: Codable { public let username: String public let name: String public let bio: String? public init( username: String, name: String, bio: String? = nil ) { self.username = username self.name = name self.bio = bio } } public extension UserProfile { static func make( username: String, name: String, bio: String? ) -> Either { let userProfile = UserProfile( username: username, name: name, bio: bio ) if let errorMessage = userProfile.validationErrorMessage { return .right(errorMessage) } else { return .left(userProfile) } } private var validationErrorMessage: String? { if name.isEmpty { return "The name field is missing." } return nil } } public struct Viewer { public let userID: String public let username: String public let name: String public let profileImageURL: String? public let isWaitlisted: Bool public init( username: String, name: String, profileImageURL: String?, isWaitlisted: Bool, userID: String ) { self.username = username self.name = name self.profileImageURL = profileImageURL self.isWaitlisted = isWaitlisted self.userID = userID } }