Scala 2.12.8 предоставляет удобные черты URLBuilder и FileBuilder . Вот пример того, как использовать FileBuilder
:
def run(input: java.io.File, cmdSeq: String*): String = {
import scala.sys.process._
(input #> Process(cmdSeq)).!!.trim
}
# Run jq against the contents of test.json
run(new java.io.File("test.json"), "jq", "-r", ".property")
Я бы хотел определить и реализовать аналогичную черту, которую мы могли бы назвать InStreamBuilder
. Использование этой черты приведет к вводу java.io.InputStream
в стандартный ввод процесса Scala. Вот пример того, как я хотел бы использовать его; использование будет очень похоже на приведенный выше пример:
def run(input: java.io.InputString, cmdSeq: String*): String = {
import scala.sys.process._
(input #> Process(cmdSeq)).!!.trim
}
# Run jq against the json in the string
val json = """{ "property": "asdf" }"""
val inStream = new java.io.ByteArrayInputStream(input.getBytes)
run(inStream, "jq", "-r", ".property")
Конечно, это должно быть легко ... и все же для меня не очевидно, как написать реализацию черты:)
Да, я знаю, что это можно сделать на Java. Я ищу решение Scala на 100%, как описано выше, без создания временного файла.