# Question
Implement the function `retrieveAddress` using the methods `getStreet1`, `getStreet2`, and `getStreet3` to create an `Address`.
```scala
case class Address(
street1: String,
street2: Option[String],
street3: Option[String]
)
def retrieveAddress: Option[Address] = {
val street1: Option[String] = Try(getStreet1).fold(
t => None,
street => Some(street)
);
street1 match {
case None => None
case Some(street) => Some(Address(street, Try(getStreet2).toOption , Try(getStreet3).toOption))
}
}
sealed trait Try[+A]
case class Success[+A](a: A) extends Try[A]
case class Failure[+A](a: Throwable) extends Try[A]
// =======================================================================
// 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
}
```