extension MergedRoom.Message {
	init?(from newMessage: MessageResponse?) {
		guard let newMessage else {
			return nil
		}
		
		_id = newMessage._id
		rid = newMessage.rid
		msg = newMessage.msg
		u = .init(from: newMessage.u)
		ts = newMessage.ts
		attachments = newMessage.attachments?.map { .init(from: $0) }
		t = newMessage.t
		groupable = newMessage.groupable
		editedAt = newMessage.editedAt
		role = newMessage.role
		comment = newMessage.comment
	}
}

extension MergedRoom.Message.User {
	init(from user: UserResponse) {
		_id = user._id
		username = user.username
		name = user.name
	}
}

extension MergedRoom.Message.Attachment {
	init(from attachment: AttachmentResponse) {
		title = attachment.title
		imageURL = attachment.imageURL
		audioURL = attachment.audioURL
		description = attachment.description
		dimensions = .init(from: attachment.dimensions)
	}
}

extension MergedRoom.Message.Attachment.Dimensions {
	init?(from dimensions: DimensionsResponse?) {
		guard let dimensions else {
			return nil
		}
		
		width = dimensions.width
		height = dimensions.height
	}
}