我正在考虑在我们的 Scala 项目中使用 stac4s 作为 STAC 客户端,但是天哪,这让我很为难。使用 cats、monads 和所有那些花哨的东西是非常令人生畏的,而且没有文档可言。
我一开始就卡住了:实例化这个东西。
import com.azavea.stac4s.api.client.SttpStacClient
import org.junit.Test
import sttp.client3._
class Stac4sTest {
@Test
def testDrive(): Unit = {
val stacClient = SttpStacClient(client = HttpURLConnectionBackend(), baseUri = uri"") // <-- error here
}
}
这给了我这个编译错误:
错误:找不到类型为 cats.MonadThrow[sttp.client3.Identity] 的证据参数的隐式值
我假设它很容易像丢失的导入一样,但我找不到它。
这是 stac4s 版本 0.8.1.
不回答这个具体案例,但提供一些指导 ...
在处理此类错误时,我经常建议查看库的测试,你会以某种方式找出如何实例化事物或缺少什么导入。
例如,您可以先查看https://github.com/azavea/stac4s/blob/master/modules/client/jvm/src/test/scala/com/azavea/stac4s/api/client/SttpStacClientSpec .scala 它将引导您进入其他课程并最终找到缺少的东西。
您的 IDE 也可以提供帮助,建议缺少什么。
我从未使用过 stac4s 库,但就实例化基于 sttp+cats 效果的客户端而言,您通常会得到一个
IO
值,它 描述 整个程序及其所有副作用(这里,分配客户端等)。因此,您需要在创建描述后对其进行评估。例如,按照sttp的文档:
val program = HttpClientCatsBackend.resource[IO]().use { backend =>
val stacClient = SttpStacClient(client = backend, baseUri = uri"")
// other operations
}
program.unsafeRunSync()(cats.effect.unsafe.implicits.global)
unsafeRunSync
执行程序,正如所描述的那样,使用给定的线程池进行任何分叉。
请注意,您无法使用
HttpURLConnectionBackend()
,因为它是同步客户端,而 stac 似乎需要 使用猫效应的后端。