From 8aed3634ca2740d2c11b4cd1b03f9b57db2d7b10 Mon Sep 17 00:00:00 2001 From: xuwei-k <6b656e6a69@gmail.com> Date: Thu, 19 Dec 2024 19:15:59 +0900 Subject: [PATCH] optimize RefinedTypeOps.unapply --- .../scala-3.0+/eu/timepit/refined/api/RefinedTypeOps.scala | 7 +++++-- .../scala-3.0-/eu/timepit/refined/api/RefinedTypeOps.scala | 7 +++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/modules/core/shared/src/main/scala-3.0+/eu/timepit/refined/api/RefinedTypeOps.scala b/modules/core/shared/src/main/scala-3.0+/eu/timepit/refined/api/RefinedTypeOps.scala index 5aa250f00..a53ba7c4d 100644 --- a/modules/core/shared/src/main/scala-3.0+/eu/timepit/refined/api/RefinedTypeOps.scala +++ b/modules/core/shared/src/main/scala-3.0+/eu/timepit/refined/api/RefinedTypeOps.scala @@ -25,8 +25,11 @@ class RefinedTypeOps[FTP, T](implicit rt: RefinedType.AuxT[FTP, T]) extends Seri def from(t: T): Either[String, FTP] = rt.refine(t) - def unapply(t: T): Option[FTP] = - from(t).toOption + def unapply(t: T): Option[FTP] = { + val res = rt.validate.validate(t) + if (res.isPassed) Some(rt.refType.unsafeWrap(t).asInstanceOf[FTP]) + else None + } def unsafeFrom(t: T): FTP = rt.unsafeRefine(t) diff --git a/modules/core/shared/src/main/scala-3.0-/eu/timepit/refined/api/RefinedTypeOps.scala b/modules/core/shared/src/main/scala-3.0-/eu/timepit/refined/api/RefinedTypeOps.scala index b7d7081e2..f6d43441d 100644 --- a/modules/core/shared/src/main/scala-3.0-/eu/timepit/refined/api/RefinedTypeOps.scala +++ b/modules/core/shared/src/main/scala-3.0-/eu/timepit/refined/api/RefinedTypeOps.scala @@ -34,8 +34,11 @@ class RefinedTypeOps[FTP, T](implicit rt: RefinedType.AuxT[FTP, T]) extends Seri def from(t: T): Either[String, FTP] = rt.refine(t) - def unapply(t: T): Option[FTP] = - from(t).toOption + def unapply(t: T): Option[FTP] = { + val res = rt.validate.validate(t) + if (res.isPassed) Some(rt.refType.unsafeWrap(t).asInstanceOf[FTP]) + else None + } def unsafeFrom(t: T): FTP = rt.unsafeRefine(t)