---
# System prepended metadata

title: Question

---

# 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: Try[Address] = {
    // TODO: Implement
    for {
        newStreet1    <- Try(getString1())
        val newStreet2 = Try(getString2()).toOption
        val newStreet3 = Try(getString3()).toOption
    } yield Adress(street1 = getStreet1(), street2 = newStreet2, street3 = newStreet3))

}



// =======================================================================  
// 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
}

```