in bijection-core/src/main/scala-2.13+/com/twitter/bijection/StringBijections.scala [46:65]
def apply(separator: String = DEFAULT_SEP): Bijection[Iterable[String], Option[String]] =
new AbstractBijection[Iterable[String], Option[String]] {
override def apply(xs: Iterable[String]) = {
// TODO: Instead of throwing, escape the separator in the encoded string.
assert(
!xs.exists(_.contains(separator)),
"Can't encode strings that include the separator."
)
if (xs.isEmpty)
None
else
Some(xs.mkString(separator))
}
override def invert(strOpt: Option[String]) =
strOpt match {
case None => Iterable.empty[String]
// String#split is not reversible, and uses regexs
case Some(str) => StringJoinBijection.split(str, separator)
}
}