Recursive enumeration in Swift

indirect enum Shape {
    case Point(Int, Int)
    case Line(Shape, Shape)
    
    func toString() -> String {
        switch self {
        case .Point(let x, let y):
            return "(\(x), \(y))"
        case .Line(let p1, let p2):
            return p1.toString() + "; " + p2.toString()
        }
    }
}

let point1 = Shape.Point(34)
let point2 = Shape.Point(79)
let line = Shape.Line(point1, point2)
let info = line.toString()
//info is "(3, 4); (7, 9)"