@@ -60,60 +60,60 @@ Asserts.scalaTestAsserts($assertCheck)
60
60
61
61
val fetchCode =
62
62
"""
63
- import java.util.concurrent.ScheduledThreadPoolExecutor
63
+ import java.util.concurrent.ScheduledThreadPoolExecutor
64
64
65
- import scala.concurrent.ExecutionContext
65
+ import scala.concurrent.ExecutionContext
66
66
67
- import cats.data.NonEmptyList
68
- import cats.effect._
67
+ import cats.data.NonEmptyList
68
+ import cats.effect._
69
69
70
- import fetch._
71
- import cats.implicits._
70
+ import fetch._
71
+ import cats.implicits._
72
72
73
- val executor = new ScheduledThreadPoolExecutor(4)
74
- val executionContext: ExecutionContext = ExecutionContext.fromExecutor(executor)
73
+ val executor = new ScheduledThreadPoolExecutor(4)
74
+ val executionContext: ExecutionContext = ExecutionContext.fromExecutor(executor)
75
75
76
- implicit val timer: Timer[IO] = IO.timer(executionContext)
77
- implicit val cs: ContextShift[IO] = IO.contextShift(executionContext)
76
+ implicit val timer: Timer[IO] = IO.timer(executionContext)
77
+ implicit val cs: ContextShift[IO] = IO.contextShift(executionContext)
78
78
79
- type UserId = Int
79
+ type UserId = Int
80
80
81
- case class User(id: UserId, username: String)
81
+ case class User(id: UserId, username: String)
82
82
83
- def latency[F[_]: Concurrent](msg: String): F[Unit] =
84
- for {
85
- _ <- Sync[F].delay(println(s"--> [${Thread.currentThread.getId}] $msg"))
86
- _ <- Sync[F].delay(Thread.sleep(100))
87
- _ <- Sync[F].delay(println(s"<-- [${Thread.currentThread.getId}] $msg"))
88
- } yield ()
83
+ def latency[F[_]: Concurrent](msg: String): F[Unit] =
84
+ for {
85
+ _ <- Sync[F].delay(println(s"--> [${Thread.currentThread.getId}] $msg"))
86
+ _ <- Sync[F].delay(Thread.sleep(100))
87
+ _ <- Sync[F].delay(println(s"<-- [${Thread.currentThread.getId}] $msg"))
88
+ } yield ()
89
89
90
- val userDatabase: Map[UserId, User] = Map(
91
- 1 -> User(1, "@one"),
92
- 2 -> User(2, "@two"),
93
- 3 -> User(3, "@three"),
94
- 4 -> User(4, "@four")
95
- )
90
+ val userDatabase: Map[UserId, User] = Map(
91
+ 1 -> User(1, "@one"),
92
+ 2 -> User(2, "@two"),
93
+ 3 -> User(3, "@three"),
94
+ 4 -> User(4, "@four")
95
+ )
96
96
97
- object Users extends Data[UserId, User] {
98
- def name = "Users"
97
+ object Users extends Data[UserId, User] {
98
+ def name = "Users"
99
99
100
- def source[F[_]: Concurrent]: DataSource[F, UserId, User] = new DataSource[F, UserId, User] {
101
- override def data = Users
100
+ def source[F[_]: Concurrent]: DataSource[F, UserId, User] = new DataSource[F, UserId, User] {
101
+ override def data = Users
102
102
103
- def CF = Concurrent[F]
103
+ def CF = Concurrent[F]
104
104
105
- override def fetch(id: UserId): F[Option[User]] =
106
- latency[F](s"One User $id") >> CF.pure(userDatabase.get(id))
105
+ override def fetch(id: UserId): F[Option[User]] =
106
+ latency[F](s"One User $id") >> CF.pure(userDatabase.get(id))
107
107
108
- override def batch(ids: NonEmptyList[UserId]): F[Map[UserId, User]] =
109
- latency[F](s"Batch Users $ids") >> CF.pure(userDatabase.filterKeys(ids.toList.toSet))
110
- }
111
- }
108
+ override def batch(ids: NonEmptyList[UserId]): F[Map[UserId, User]] =
109
+ latency[F](s"Batch Users $ids") >> CF.pure(userDatabase.view. filterKeys(ids.toList.toSet).toMap )
110
+ }
111
+ }
112
112
113
- def getUser[F[_]: Concurrent](id: UserId): Fetch[F, User] = Fetch[F, UserId, User](id, Users.source)
113
+ def getUser[F[_]: Concurrent](id: UserId): Fetch[F, User] = Fetch[F, UserId, User](id, Users.source)
114
114
115
- def fetchUser[F[_] : Concurrent]: Fetch[F, User] = getUser(1)
115
+ def fetchUser[F[_] : Concurrent]: Fetch[F, User] = getUser(1)
116
116
117
- Fetch.run[IO](fetchUser).unsafeRunSync()
117
+ Fetch.run[IO](fetchUser).unsafeRunSync()
118
118
"""
119
119
}
0 commit comments