diff --git a/core/jvm/src/main/scala/works/iterative/core/FileSupportPlatformSpecific.scala b/core/jvm/src/main/scala/works/iterative/core/FileSupportPlatformSpecific.scala index a179a80..451a924 100644 --- a/core/jvm/src/main/scala/works/iterative/core/FileSupportPlatformSpecific.scala +++ b/core/jvm/src/main/scala/works/iterative/core/FileSupportPlatformSpecific.scala @@ -1,6 +1,18 @@ package works.iterative.core +import zio.* +import zio.stream.* + trait FileSupportPlatformSpecific: type FileRepr = java.io.File - extension (f: FileRepr) def name: String = f.getName + extension (f: FileRepr) + def name: String = f.getName + def toStream: Stream[Throwable, Byte] = + ZStream.fromInputStreamScoped( + ZIO.fromAutoCloseable( + ZIO.attempt(new java.io.FileInputStream(f)).refineOrDie { + case e: java.io.IOException => e + } + ) + ) diff --git a/core/jvm/src/main/scala/works/iterative/core/FileSupportPlatformSpecific.scala b/core/jvm/src/main/scala/works/iterative/core/FileSupportPlatformSpecific.scala index a179a80..451a924 100644 --- a/core/jvm/src/main/scala/works/iterative/core/FileSupportPlatformSpecific.scala +++ b/core/jvm/src/main/scala/works/iterative/core/FileSupportPlatformSpecific.scala @@ -1,6 +1,18 @@ package works.iterative.core +import zio.* +import zio.stream.* + trait FileSupportPlatformSpecific: type FileRepr = java.io.File - extension (f: FileRepr) def name: String = f.getName + extension (f: FileRepr) + def name: String = f.getName + def toStream: Stream[Throwable, Byte] = + ZStream.fromInputStreamScoped( + ZIO.fromAutoCloseable( + ZIO.attempt(new java.io.FileInputStream(f)).refineOrDie { + case e: java.io.IOException => e + } + ) + ) diff --git a/core/jvm/src/main/scala/works/iterative/core/service/impl/JcaDigestGenerator.scala b/core/jvm/src/main/scala/works/iterative/core/service/impl/JcaDigestGenerator.scala deleted file mode 100644 index 0fbb024..0000000 --- a/core/jvm/src/main/scala/works/iterative/core/service/impl/JcaDigestGenerator.scala +++ /dev/null @@ -1,25 +0,0 @@ -package works.iterative.core -package service -package impl - -import zio.* -import zio.stream.* - -class JcaDigestGenerator extends DigestGenerator: - - override def generateDigest( - algorithm: DigestAlgorithm, - content: UStream[Byte] - ): UIO[Digest] = { - for - md <- ZIO.attempt( - java.security.MessageDigest.getInstance(algorithm.value) - ) - _ <- content.runForeachChunk(e => ZIO.attempt(md.update(e.toArray))) - digest <- ZIO.attempt(md.digest()) - yield Digest(algorithm, digest) - }.orDie - -object JcaDigestGenerator: - val layer: ULayer[DigestGenerator] = - ZLayer.succeed(new JcaDigestGenerator) diff --git a/core/jvm/src/main/scala/works/iterative/core/FileSupportPlatformSpecific.scala b/core/jvm/src/main/scala/works/iterative/core/FileSupportPlatformSpecific.scala index a179a80..451a924 100644 --- a/core/jvm/src/main/scala/works/iterative/core/FileSupportPlatformSpecific.scala +++ b/core/jvm/src/main/scala/works/iterative/core/FileSupportPlatformSpecific.scala @@ -1,6 +1,18 @@ package works.iterative.core +import zio.* +import zio.stream.* + trait FileSupportPlatformSpecific: type FileRepr = java.io.File - extension (f: FileRepr) def name: String = f.getName + extension (f: FileRepr) + def name: String = f.getName + def toStream: Stream[Throwable, Byte] = + ZStream.fromInputStreamScoped( + ZIO.fromAutoCloseable( + ZIO.attempt(new java.io.FileInputStream(f)).refineOrDie { + case e: java.io.IOException => e + } + ) + ) diff --git a/core/jvm/src/main/scala/works/iterative/core/service/impl/JcaDigestGenerator.scala b/core/jvm/src/main/scala/works/iterative/core/service/impl/JcaDigestGenerator.scala deleted file mode 100644 index 0fbb024..0000000 --- a/core/jvm/src/main/scala/works/iterative/core/service/impl/JcaDigestGenerator.scala +++ /dev/null @@ -1,25 +0,0 @@ -package works.iterative.core -package service -package impl - -import zio.* -import zio.stream.* - -class JcaDigestGenerator extends DigestGenerator: - - override def generateDigest( - algorithm: DigestAlgorithm, - content: UStream[Byte] - ): UIO[Digest] = { - for - md <- ZIO.attempt( - java.security.MessageDigest.getInstance(algorithm.value) - ) - _ <- content.runForeachChunk(e => ZIO.attempt(md.update(e.toArray))) - digest <- ZIO.attempt(md.digest()) - yield Digest(algorithm, digest) - }.orDie - -object JcaDigestGenerator: - val layer: ULayer[DigestGenerator] = - ZLayer.succeed(new JcaDigestGenerator) diff --git a/core/jvm/src/main/scala/works/iterative/core/service/impl/JcaDigestService.scala b/core/jvm/src/main/scala/works/iterative/core/service/impl/JcaDigestService.scala new file mode 100644 index 0000000..8c88818 --- /dev/null +++ b/core/jvm/src/main/scala/works/iterative/core/service/impl/JcaDigestService.scala @@ -0,0 +1,26 @@ +package works.iterative.core +package service +package impl + +import zio.* +import zio.stream.* + +class JcaDigestService extends DigestService: + + override def digest[E]( + algorithm: DigestAlgorithm, + content: Stream[E, Byte] + ): IO[E, Digest] = + for + md <- ZIO + .attempt( + java.security.MessageDigest.getInstance(algorithm.value) + ) + .orDie + _ <- content.runForeachChunk(e => ZIO.attempt(md.update(e.toArray)).orDie) + digest <- ZIO.attempt(md.digest()).orDie + yield Digest(algorithm, digest) + +object JcaDigestGenerator: + val layer: ULayer[DigestService] = + ZLayer.succeed(new JcaDigestService) diff --git a/core/jvm/src/main/scala/works/iterative/core/FileSupportPlatformSpecific.scala b/core/jvm/src/main/scala/works/iterative/core/FileSupportPlatformSpecific.scala index a179a80..451a924 100644 --- a/core/jvm/src/main/scala/works/iterative/core/FileSupportPlatformSpecific.scala +++ b/core/jvm/src/main/scala/works/iterative/core/FileSupportPlatformSpecific.scala @@ -1,6 +1,18 @@ package works.iterative.core +import zio.* +import zio.stream.* + trait FileSupportPlatformSpecific: type FileRepr = java.io.File - extension (f: FileRepr) def name: String = f.getName + extension (f: FileRepr) + def name: String = f.getName + def toStream: Stream[Throwable, Byte] = + ZStream.fromInputStreamScoped( + ZIO.fromAutoCloseable( + ZIO.attempt(new java.io.FileInputStream(f)).refineOrDie { + case e: java.io.IOException => e + } + ) + ) diff --git a/core/jvm/src/main/scala/works/iterative/core/service/impl/JcaDigestGenerator.scala b/core/jvm/src/main/scala/works/iterative/core/service/impl/JcaDigestGenerator.scala deleted file mode 100644 index 0fbb024..0000000 --- a/core/jvm/src/main/scala/works/iterative/core/service/impl/JcaDigestGenerator.scala +++ /dev/null @@ -1,25 +0,0 @@ -package works.iterative.core -package service -package impl - -import zio.* -import zio.stream.* - -class JcaDigestGenerator extends DigestGenerator: - - override def generateDigest( - algorithm: DigestAlgorithm, - content: UStream[Byte] - ): UIO[Digest] = { - for - md <- ZIO.attempt( - java.security.MessageDigest.getInstance(algorithm.value) - ) - _ <- content.runForeachChunk(e => ZIO.attempt(md.update(e.toArray))) - digest <- ZIO.attempt(md.digest()) - yield Digest(algorithm, digest) - }.orDie - -object JcaDigestGenerator: - val layer: ULayer[DigestGenerator] = - ZLayer.succeed(new JcaDigestGenerator) diff --git a/core/jvm/src/main/scala/works/iterative/core/service/impl/JcaDigestService.scala b/core/jvm/src/main/scala/works/iterative/core/service/impl/JcaDigestService.scala new file mode 100644 index 0000000..8c88818 --- /dev/null +++ b/core/jvm/src/main/scala/works/iterative/core/service/impl/JcaDigestService.scala @@ -0,0 +1,26 @@ +package works.iterative.core +package service +package impl + +import zio.* +import zio.stream.* + +class JcaDigestService extends DigestService: + + override def digest[E]( + algorithm: DigestAlgorithm, + content: Stream[E, Byte] + ): IO[E, Digest] = + for + md <- ZIO + .attempt( + java.security.MessageDigest.getInstance(algorithm.value) + ) + .orDie + _ <- content.runForeachChunk(e => ZIO.attempt(md.update(e.toArray)).orDie) + digest <- ZIO.attempt(md.digest()).orDie + yield Digest(algorithm, digest) + +object JcaDigestGenerator: + val layer: ULayer[DigestService] = + ZLayer.succeed(new JcaDigestService) diff --git a/core/shared/src/main/scala/works/iterative/core/Digest.scala b/core/shared/src/main/scala/works/iterative/core/Digest.scala index 17db0e2..e61a4fc 100644 --- a/core/shared/src/main/scala/works/iterative/core/Digest.scala +++ b/core/shared/src/main/scala/works/iterative/core/Digest.scala @@ -1,6 +1,6 @@ package works.iterative.core -import works.iterative.core.service.DigestGenerator +import works.iterative.core.service.DigestService import zio.* @@ -19,5 +19,5 @@ def compute( algorithm: DigestAlgorithm, value: Array[Byte] - ): URIO[DigestGenerator, Digest] = - DigestGenerator.generateDigest(algorithm, value) + ): URIO[DigestService, Digest] = + DigestService.digest(algorithm, value) diff --git a/core/jvm/src/main/scala/works/iterative/core/FileSupportPlatformSpecific.scala b/core/jvm/src/main/scala/works/iterative/core/FileSupportPlatformSpecific.scala index a179a80..451a924 100644 --- a/core/jvm/src/main/scala/works/iterative/core/FileSupportPlatformSpecific.scala +++ b/core/jvm/src/main/scala/works/iterative/core/FileSupportPlatformSpecific.scala @@ -1,6 +1,18 @@ package works.iterative.core +import zio.* +import zio.stream.* + trait FileSupportPlatformSpecific: type FileRepr = java.io.File - extension (f: FileRepr) def name: String = f.getName + extension (f: FileRepr) + def name: String = f.getName + def toStream: Stream[Throwable, Byte] = + ZStream.fromInputStreamScoped( + ZIO.fromAutoCloseable( + ZIO.attempt(new java.io.FileInputStream(f)).refineOrDie { + case e: java.io.IOException => e + } + ) + ) diff --git a/core/jvm/src/main/scala/works/iterative/core/service/impl/JcaDigestGenerator.scala b/core/jvm/src/main/scala/works/iterative/core/service/impl/JcaDigestGenerator.scala deleted file mode 100644 index 0fbb024..0000000 --- a/core/jvm/src/main/scala/works/iterative/core/service/impl/JcaDigestGenerator.scala +++ /dev/null @@ -1,25 +0,0 @@ -package works.iterative.core -package service -package impl - -import zio.* -import zio.stream.* - -class JcaDigestGenerator extends DigestGenerator: - - override def generateDigest( - algorithm: DigestAlgorithm, - content: UStream[Byte] - ): UIO[Digest] = { - for - md <- ZIO.attempt( - java.security.MessageDigest.getInstance(algorithm.value) - ) - _ <- content.runForeachChunk(e => ZIO.attempt(md.update(e.toArray))) - digest <- ZIO.attempt(md.digest()) - yield Digest(algorithm, digest) - }.orDie - -object JcaDigestGenerator: - val layer: ULayer[DigestGenerator] = - ZLayer.succeed(new JcaDigestGenerator) diff --git a/core/jvm/src/main/scala/works/iterative/core/service/impl/JcaDigestService.scala b/core/jvm/src/main/scala/works/iterative/core/service/impl/JcaDigestService.scala new file mode 100644 index 0000000..8c88818 --- /dev/null +++ b/core/jvm/src/main/scala/works/iterative/core/service/impl/JcaDigestService.scala @@ -0,0 +1,26 @@ +package works.iterative.core +package service +package impl + +import zio.* +import zio.stream.* + +class JcaDigestService extends DigestService: + + override def digest[E]( + algorithm: DigestAlgorithm, + content: Stream[E, Byte] + ): IO[E, Digest] = + for + md <- ZIO + .attempt( + java.security.MessageDigest.getInstance(algorithm.value) + ) + .orDie + _ <- content.runForeachChunk(e => ZIO.attempt(md.update(e.toArray)).orDie) + digest <- ZIO.attempt(md.digest()).orDie + yield Digest(algorithm, digest) + +object JcaDigestGenerator: + val layer: ULayer[DigestService] = + ZLayer.succeed(new JcaDigestService) diff --git a/core/shared/src/main/scala/works/iterative/core/Digest.scala b/core/shared/src/main/scala/works/iterative/core/Digest.scala index 17db0e2..e61a4fc 100644 --- a/core/shared/src/main/scala/works/iterative/core/Digest.scala +++ b/core/shared/src/main/scala/works/iterative/core/Digest.scala @@ -1,6 +1,6 @@ package works.iterative.core -import works.iterative.core.service.DigestGenerator +import works.iterative.core.service.DigestService import zio.* @@ -19,5 +19,5 @@ def compute( algorithm: DigestAlgorithm, value: Array[Byte] - ): URIO[DigestGenerator, Digest] = - DigestGenerator.generateDigest(algorithm, value) + ): URIO[DigestService, Digest] = + DigestService.digest(algorithm, value) diff --git a/core/shared/src/main/scala/works/iterative/core/UserMessage.scala b/core/shared/src/main/scala/works/iterative/core/UserMessage.scala index 37bda09..0391884 100644 --- a/core/shared/src/main/scala/works/iterative/core/UserMessage.scala +++ b/core/shared/src/main/scala/works/iterative/core/UserMessage.scala @@ -9,5 +9,8 @@ s"${id}[${args.mkString(", ")}]" object UserMessage: + def withMessage(id: MessageId)(t: Throwable): UserMessage = + UserMessage(id, t.getMessage()) + given Conversion[MessageId, UserMessage] with def apply(id: MessageId): UserMessage = UserMessage(id) diff --git a/core/jvm/src/main/scala/works/iterative/core/FileSupportPlatformSpecific.scala b/core/jvm/src/main/scala/works/iterative/core/FileSupportPlatformSpecific.scala index a179a80..451a924 100644 --- a/core/jvm/src/main/scala/works/iterative/core/FileSupportPlatformSpecific.scala +++ b/core/jvm/src/main/scala/works/iterative/core/FileSupportPlatformSpecific.scala @@ -1,6 +1,18 @@ package works.iterative.core +import zio.* +import zio.stream.* + trait FileSupportPlatformSpecific: type FileRepr = java.io.File - extension (f: FileRepr) def name: String = f.getName + extension (f: FileRepr) + def name: String = f.getName + def toStream: Stream[Throwable, Byte] = + ZStream.fromInputStreamScoped( + ZIO.fromAutoCloseable( + ZIO.attempt(new java.io.FileInputStream(f)).refineOrDie { + case e: java.io.IOException => e + } + ) + ) diff --git a/core/jvm/src/main/scala/works/iterative/core/service/impl/JcaDigestGenerator.scala b/core/jvm/src/main/scala/works/iterative/core/service/impl/JcaDigestGenerator.scala deleted file mode 100644 index 0fbb024..0000000 --- a/core/jvm/src/main/scala/works/iterative/core/service/impl/JcaDigestGenerator.scala +++ /dev/null @@ -1,25 +0,0 @@ -package works.iterative.core -package service -package impl - -import zio.* -import zio.stream.* - -class JcaDigestGenerator extends DigestGenerator: - - override def generateDigest( - algorithm: DigestAlgorithm, - content: UStream[Byte] - ): UIO[Digest] = { - for - md <- ZIO.attempt( - java.security.MessageDigest.getInstance(algorithm.value) - ) - _ <- content.runForeachChunk(e => ZIO.attempt(md.update(e.toArray))) - digest <- ZIO.attempt(md.digest()) - yield Digest(algorithm, digest) - }.orDie - -object JcaDigestGenerator: - val layer: ULayer[DigestGenerator] = - ZLayer.succeed(new JcaDigestGenerator) diff --git a/core/jvm/src/main/scala/works/iterative/core/service/impl/JcaDigestService.scala b/core/jvm/src/main/scala/works/iterative/core/service/impl/JcaDigestService.scala new file mode 100644 index 0000000..8c88818 --- /dev/null +++ b/core/jvm/src/main/scala/works/iterative/core/service/impl/JcaDigestService.scala @@ -0,0 +1,26 @@ +package works.iterative.core +package service +package impl + +import zio.* +import zio.stream.* + +class JcaDigestService extends DigestService: + + override def digest[E]( + algorithm: DigestAlgorithm, + content: Stream[E, Byte] + ): IO[E, Digest] = + for + md <- ZIO + .attempt( + java.security.MessageDigest.getInstance(algorithm.value) + ) + .orDie + _ <- content.runForeachChunk(e => ZIO.attempt(md.update(e.toArray)).orDie) + digest <- ZIO.attempt(md.digest()).orDie + yield Digest(algorithm, digest) + +object JcaDigestGenerator: + val layer: ULayer[DigestService] = + ZLayer.succeed(new JcaDigestService) diff --git a/core/shared/src/main/scala/works/iterative/core/Digest.scala b/core/shared/src/main/scala/works/iterative/core/Digest.scala index 17db0e2..e61a4fc 100644 --- a/core/shared/src/main/scala/works/iterative/core/Digest.scala +++ b/core/shared/src/main/scala/works/iterative/core/Digest.scala @@ -1,6 +1,6 @@ package works.iterative.core -import works.iterative.core.service.DigestGenerator +import works.iterative.core.service.DigestService import zio.* @@ -19,5 +19,5 @@ def compute( algorithm: DigestAlgorithm, value: Array[Byte] - ): URIO[DigestGenerator, Digest] = - DigestGenerator.generateDigest(algorithm, value) + ): URIO[DigestService, Digest] = + DigestService.digest(algorithm, value) diff --git a/core/shared/src/main/scala/works/iterative/core/UserMessage.scala b/core/shared/src/main/scala/works/iterative/core/UserMessage.scala index 37bda09..0391884 100644 --- a/core/shared/src/main/scala/works/iterative/core/UserMessage.scala +++ b/core/shared/src/main/scala/works/iterative/core/UserMessage.scala @@ -9,5 +9,8 @@ s"${id}[${args.mkString(", ")}]" object UserMessage: + def withMessage(id: MessageId)(t: Throwable): UserMessage = + UserMessage(id, t.getMessage()) + given Conversion[MessageId, UserMessage] with def apply(id: MessageId): UserMessage = UserMessage(id) diff --git a/core/shared/src/main/scala/works/iterative/core/service/DigestGenerator.scala b/core/shared/src/main/scala/works/iterative/core/service/DigestGenerator.scala deleted file mode 100644 index 5cbfa3d..0000000 --- a/core/shared/src/main/scala/works/iterative/core/service/DigestGenerator.scala +++ /dev/null @@ -1,26 +0,0 @@ -package works.iterative.core.service - -import works.iterative.core.Digest -import works.iterative.core.DigestAlgorithm - -import zio.* -import zio.stream.* - -trait DigestGenerator: - def generateDigest( - algorithm: DigestAlgorithm, - content: UStream[Byte] - ): UIO[Digest] - -object DigestGenerator: - def generateDigest( - algorithm: DigestAlgorithm, - content: UStream[Byte] - ): URIO[DigestGenerator, Digest] = - ZIO.serviceWithZIO[DigestGenerator](_.generateDigest(algorithm, content)) - - def generateDigest( - algorithm: DigestAlgorithm, - content: Array[Byte] - ): URIO[DigestGenerator, Digest] = - generateDigest(algorithm, ZStream.fromChunk(Chunk.fromArray(content))) diff --git a/core/jvm/src/main/scala/works/iterative/core/FileSupportPlatformSpecific.scala b/core/jvm/src/main/scala/works/iterative/core/FileSupportPlatformSpecific.scala index a179a80..451a924 100644 --- a/core/jvm/src/main/scala/works/iterative/core/FileSupportPlatformSpecific.scala +++ b/core/jvm/src/main/scala/works/iterative/core/FileSupportPlatformSpecific.scala @@ -1,6 +1,18 @@ package works.iterative.core +import zio.* +import zio.stream.* + trait FileSupportPlatformSpecific: type FileRepr = java.io.File - extension (f: FileRepr) def name: String = f.getName + extension (f: FileRepr) + def name: String = f.getName + def toStream: Stream[Throwable, Byte] = + ZStream.fromInputStreamScoped( + ZIO.fromAutoCloseable( + ZIO.attempt(new java.io.FileInputStream(f)).refineOrDie { + case e: java.io.IOException => e + } + ) + ) diff --git a/core/jvm/src/main/scala/works/iterative/core/service/impl/JcaDigestGenerator.scala b/core/jvm/src/main/scala/works/iterative/core/service/impl/JcaDigestGenerator.scala deleted file mode 100644 index 0fbb024..0000000 --- a/core/jvm/src/main/scala/works/iterative/core/service/impl/JcaDigestGenerator.scala +++ /dev/null @@ -1,25 +0,0 @@ -package works.iterative.core -package service -package impl - -import zio.* -import zio.stream.* - -class JcaDigestGenerator extends DigestGenerator: - - override def generateDigest( - algorithm: DigestAlgorithm, - content: UStream[Byte] - ): UIO[Digest] = { - for - md <- ZIO.attempt( - java.security.MessageDigest.getInstance(algorithm.value) - ) - _ <- content.runForeachChunk(e => ZIO.attempt(md.update(e.toArray))) - digest <- ZIO.attempt(md.digest()) - yield Digest(algorithm, digest) - }.orDie - -object JcaDigestGenerator: - val layer: ULayer[DigestGenerator] = - ZLayer.succeed(new JcaDigestGenerator) diff --git a/core/jvm/src/main/scala/works/iterative/core/service/impl/JcaDigestService.scala b/core/jvm/src/main/scala/works/iterative/core/service/impl/JcaDigestService.scala new file mode 100644 index 0000000..8c88818 --- /dev/null +++ b/core/jvm/src/main/scala/works/iterative/core/service/impl/JcaDigestService.scala @@ -0,0 +1,26 @@ +package works.iterative.core +package service +package impl + +import zio.* +import zio.stream.* + +class JcaDigestService extends DigestService: + + override def digest[E]( + algorithm: DigestAlgorithm, + content: Stream[E, Byte] + ): IO[E, Digest] = + for + md <- ZIO + .attempt( + java.security.MessageDigest.getInstance(algorithm.value) + ) + .orDie + _ <- content.runForeachChunk(e => ZIO.attempt(md.update(e.toArray)).orDie) + digest <- ZIO.attempt(md.digest()).orDie + yield Digest(algorithm, digest) + +object JcaDigestGenerator: + val layer: ULayer[DigestService] = + ZLayer.succeed(new JcaDigestService) diff --git a/core/shared/src/main/scala/works/iterative/core/Digest.scala b/core/shared/src/main/scala/works/iterative/core/Digest.scala index 17db0e2..e61a4fc 100644 --- a/core/shared/src/main/scala/works/iterative/core/Digest.scala +++ b/core/shared/src/main/scala/works/iterative/core/Digest.scala @@ -1,6 +1,6 @@ package works.iterative.core -import works.iterative.core.service.DigestGenerator +import works.iterative.core.service.DigestService import zio.* @@ -19,5 +19,5 @@ def compute( algorithm: DigestAlgorithm, value: Array[Byte] - ): URIO[DigestGenerator, Digest] = - DigestGenerator.generateDigest(algorithm, value) + ): URIO[DigestService, Digest] = + DigestService.digest(algorithm, value) diff --git a/core/shared/src/main/scala/works/iterative/core/UserMessage.scala b/core/shared/src/main/scala/works/iterative/core/UserMessage.scala index 37bda09..0391884 100644 --- a/core/shared/src/main/scala/works/iterative/core/UserMessage.scala +++ b/core/shared/src/main/scala/works/iterative/core/UserMessage.scala @@ -9,5 +9,8 @@ s"${id}[${args.mkString(", ")}]" object UserMessage: + def withMessage(id: MessageId)(t: Throwable): UserMessage = + UserMessage(id, t.getMessage()) + given Conversion[MessageId, UserMessage] with def apply(id: MessageId): UserMessage = UserMessage(id) diff --git a/core/shared/src/main/scala/works/iterative/core/service/DigestGenerator.scala b/core/shared/src/main/scala/works/iterative/core/service/DigestGenerator.scala deleted file mode 100644 index 5cbfa3d..0000000 --- a/core/shared/src/main/scala/works/iterative/core/service/DigestGenerator.scala +++ /dev/null @@ -1,26 +0,0 @@ -package works.iterative.core.service - -import works.iterative.core.Digest -import works.iterative.core.DigestAlgorithm - -import zio.* -import zio.stream.* - -trait DigestGenerator: - def generateDigest( - algorithm: DigestAlgorithm, - content: UStream[Byte] - ): UIO[Digest] - -object DigestGenerator: - def generateDigest( - algorithm: DigestAlgorithm, - content: UStream[Byte] - ): URIO[DigestGenerator, Digest] = - ZIO.serviceWithZIO[DigestGenerator](_.generateDigest(algorithm, content)) - - def generateDigest( - algorithm: DigestAlgorithm, - content: Array[Byte] - ): URIO[DigestGenerator, Digest] = - generateDigest(algorithm, ZStream.fromChunk(Chunk.fromArray(content))) diff --git a/core/shared/src/main/scala/works/iterative/core/service/DigestService.scala b/core/shared/src/main/scala/works/iterative/core/service/DigestService.scala new file mode 100644 index 0000000..883bd7a --- /dev/null +++ b/core/shared/src/main/scala/works/iterative/core/service/DigestService.scala @@ -0,0 +1,26 @@ +package works.iterative.core.service + +import works.iterative.core.Digest +import works.iterative.core.DigestAlgorithm + +import zio.* +import zio.stream.* + +trait DigestService: + def digest[E]( + algorithm: DigestAlgorithm, + content: Stream[E, Byte] + ): IO[E, Digest] + +object DigestService: + def digest[E]( + algorithm: DigestAlgorithm, + content: Stream[E, Byte] + ): ZIO[DigestService, E, Digest] = + ZIO.serviceWithZIO[DigestService](_.digest(algorithm, content)) + + def digest( + algorithm: DigestAlgorithm, + content: Array[Byte] + ): URIO[DigestService, Digest] = + digest(algorithm, ZStream.fromChunk(Chunk.fromArray(content)))