var oneValue
: Option
[String
] = None
var twoValue
: Option
[Int
] = None
def one
(value
: String
): SimpleBuilder
= { oneValue = Some(value)
}
def two
(value
: Int
): SimpleBuilder
= { twoValue = Some(value)
}
Simple(oneValue.getOrElse("DEFAULT"), twoValue.getOrElse(0))
}
}
case class Complex
(part
: Double, place
: String
)
var partValue
: Option
[Double
] = None
var placeValue
: Option
[String
] = None
def part
(value
: Double
): ComplexBuilder
= { partValue = Some(value)
}
def place
(value
: String
): ComplexBuilder
= { placeValue = Some(value)
}
Complex(partValue.getOrElse(0.0), placeValue.getOrElse("DEFAULT"))
}
}
}
type Result
= SimpleBuilder
}
type Result
= ComplexBuilder
}
def builder
[T
](implicit B
: Buildable
[T
]): B.
Result = B.
newBuilder }
println(builder[Simple].one("SOMETEXT").two(22).build())
println(builder[Complex].part(3.14).place("London").build())
}
b2JqZWN0IE1haW4gZXh0ZW5kcyBBcHAgewoKaW1wb3J0IHNjYWxhLnJlZmxlY3QuXwoKY2FzZSBjbGFzcyBTaW1wbGUob25lOiBTdHJpbmcsIHR3bzogSW50KQoKY2xhc3MgU2ltcGxlQnVpbGRlciB7CiAgdmFyIG9uZVZhbHVlOiBPcHRpb25bU3RyaW5nXSA9IE5vbmUKICB2YXIgdHdvVmFsdWU6IE9wdGlvbltJbnRdID0gTm9uZQoKICBkZWYgb25lKHZhbHVlOiBTdHJpbmcpOiBTaW1wbGVCdWlsZGVyID0gewogICAgb25lVmFsdWUgPSBTb21lKHZhbHVlKQogICAgdGhpcwogIH0KCiAgZGVmIHR3byh2YWx1ZTogSW50KTogU2ltcGxlQnVpbGRlciA9IHsKICAgIHR3b1ZhbHVlID0gU29tZSh2YWx1ZSkKICAgIHRoaXMKICB9CgogIGRlZiBidWlsZCgpOiBTaW1wbGUgPSB7CiAgICBTaW1wbGUob25lVmFsdWUuZ2V0T3JFbHNlKCJERUZBVUxUIiksIHR3b1ZhbHVlLmdldE9yRWxzZSgwKSkKICB9Cn0KCmNhc2UgY2xhc3MgQ29tcGxleChwYXJ0OiBEb3VibGUsIHBsYWNlOiBTdHJpbmcpCgpjbGFzcyBDb21wbGV4QnVpbGRlciB7CiAgdmFyIHBhcnRWYWx1ZTogT3B0aW9uW0RvdWJsZV0gPSBOb25lCiAgdmFyIHBsYWNlVmFsdWU6IE9wdGlvbltTdHJpbmddID0gTm9uZQoKICBkZWYgcGFydCh2YWx1ZTogRG91YmxlKTogQ29tcGxleEJ1aWxkZXIgPSB7CiAgICBwYXJ0VmFsdWUgPSBTb21lKHZhbHVlKQogICAgdGhpcwogIH0KCiAgZGVmIHBsYWNlKHZhbHVlOiBTdHJpbmcpOiBDb21wbGV4QnVpbGRlciA9IHsKICAgIHBsYWNlVmFsdWUgPSBTb21lKHZhbHVlKQogICAgdGhpcwogIH0KCiAgZGVmIGJ1aWxkKCk6IENvbXBsZXggPSB7CiAgICBDb21wbGV4KHBhcnRWYWx1ZS5nZXRPckVsc2UoMC4wKSwgcGxhY2VWYWx1ZS5nZXRPckVsc2UoIkRFRkFVTFQiKSkKICB9Cn0KCnRyYWl0IEJ1aWxkYWJsZVtUXSB7Cgl0eXBlIFJlc3VsdAoJZGVmIG5ld0J1aWxkZXI6IFJlc3VsdAp9CgpvYmplY3QgQnVpbGRhYmxlIHsKCWltcGxpY2l0IG9iamVjdCBTaW1wbGVCdWlsZGFibGUgZXh0ZW5kcyBCdWlsZGFibGVbU2ltcGxlXSB7CgkJdHlwZSBSZXN1bHQgPSBTaW1wbGVCdWlsZGVyCgkJb3ZlcnJpZGUgZGVmIG5ld0J1aWxkZXIgPSBuZXcgU2ltcGxlQnVpbGRlcgoJfQoJCglpbXBsaWNpdCBvYmplY3QgQ29tcGxleEJ1aWxkYWJsZSBleHRlbmRzIEJ1aWxkYWJsZVtDb21wbGV4XSB7CgkJdHlwZSBSZXN1bHQgPSBDb21wbGV4QnVpbGRlcgoJCW92ZXJyaWRlIGRlZiBuZXdCdWlsZGVyID0gbmV3IENvbXBsZXhCdWlsZGVyCgl9CgkKCWRlZiBidWlsZGVyW1RdKGltcGxpY2l0IEI6IEJ1aWxkYWJsZVtUXSk6IEIuUmVzdWx0ID0gQi5uZXdCdWlsZGVyCn0KCmltcG9ydCBCdWlsZGFibGUuXwoKcHJpbnRsbihidWlsZGVyW1NpbXBsZV0ub25lKCJTT01FVEVYVCIpLnR3bygyMikuYnVpbGQoKSkKcHJpbnRsbihidWlsZGVyW0NvbXBsZXhdLnBhcnQoMy4xNCkucGxhY2UoIkxvbmRvbiIpLmJ1aWxkKCkpCgp9