# Question
Implement the function `retrieveAddress` using the methods `getStreet1`, `getStreet2`, and `getStreet3` to create an `Address`.
```scala
import scala.util.Try
import scala.util.Success
import scala.util.Failure
case class Address(street1: String, street2: Option[String], street3: Option[String])
// getStreet1 succeeds
// getStreet2 fails
// getStreet3 fails
// TODO: Implement
def retrieveAddress: Option[Address] = {
//Address("Address", "address", exception)
//Address("Address", exception, "address")
//Address("Address", exception, exception)
Address(getStreet1, Some(getStreet2), Some(getStreet3))
}
def retrieveAddress: Address = {
val street2 = Try(getStreet2).toOption
val street3 = Try(getStreet3).toOption
Address(getStreet1, street2, street3)
}
def foo(t: Try[String]): Option[String]
Try(getStreet1) match {
case Success(street1) =>
Try(getStreet2) match {
case Success(street2) =>
val street3_1 = Try(getStreet3).toOption
case Failure(ex) =>
Some(Address(street1,None, street3_1))
}
case Failure(ex) => None
}
}
case class Result(a: Address, errors: List[String])
/**
* Retrieves the main street address.
*
* @throws RuntimeException
*/
def getStreet1: String = {
// implementation
}
/**
* Retrieves additional street address line 2.
*
* @throws RuntimeException
*/
def getStreet2: String = {
// implementation
}
/**
* Retrieves additional street address line 3.
*
* @throws RuntimeException
*/
def getStreet3: String = {
// implementation
}
```