---
# System prepended metadata

title: Question

---

# Question

Implement the function `retrieveAddress` using the methods `getStreet1`, `getStreet2`, and `getStreet3` to create an `Address`.

import scala.util.Try

```scala
case class Address(
  street1: String,
  street2: Option[String],
  street3: Option[String]
)

case class Street1Absent(errors: List[String]) extends RuntimeException(null, error)

// TODO: Implement
def retrieveAddress: Either[Street1Absent, Address] = {
    val street2 = Try(getStreet2).toOption
    val street3 = Try(getStreet3).toOption
    Try(getStreet1)
    .toEither
    .fold(
        th => Left(Street1Absent("error.absent.street1")),
        street1 => Right(Address(street1, street2, street3))
    )
}



// =======================================================================  
// LIBRARY METHODS 
// =======================================================================

/**
  * Retrieves the main street address.
  * @throws RuntimeException if empty
  */
def getStreet1: String = {
  // implementation
  
}

/**
  * Retrieves additional street address line 2.
  * @throws RuntimeException if empty
  */
def getStreet2: String = {
  // implementation
}

/**
  * Retrieves additional street address line 3.
  * @throws RuntimeException if empty
  */
def getStreet3: String = {
  // implementation
}

```