From 18666cc2578c34dda65c1600386128a46f7cf691 Mon Sep 17 00:00:00 2001 From: Jon Pretty Date: Sun, 15 Sep 2024 14:38:35 +0100 Subject: [PATCH] Provide a "dumb `Foci`" instance --- src/core/contingency.Contingency.scala | 2 +- src/core/contingency.Foci.scala | 26 +++++++++++++++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/core/contingency.Contingency.scala b/src/core/contingency.Contingency.scala index 2047e8e..fbe29e1 100644 --- a/src/core/contingency.Contingency.scala +++ b/src/core/contingency.Contingency.scala @@ -287,7 +287,7 @@ object Contingency: (using Quotes) : Expr[ResultType] = - '{ val foci: Foci[FocusType] = Foci() + '{ val foci: Foci[FocusType] = TraceFoci() val result = boundary[Option[ResultType]]: label ?=> ${ import quotes.reflect.* diff --git a/src/core/contingency.Foci.scala b/src/core/contingency.Foci.scala index 458bdba..ec22647 100644 --- a/src/core/contingency.Foci.scala +++ b/src/core/contingency.Foci.scala @@ -21,7 +21,31 @@ import vacuous.* import scala.collection.mutable as scm -class Foci[FocusType](): +object Foci: + given [FocusType] => Foci[FocusType] = new: + def length: Int = 0 + def success: Boolean = false + def register(error: Exception): Unit = () + + def fold[AccrualType](initial: AccrualType) + (lambda: (Optional[FocusType], AccrualType) => PartialFunction[Exception, AccrualType]) + : AccrualType = + initial + + def supplement(count: Int, transform: Optional[FocusType] => FocusType): Unit = () + +trait Foci[FocusType]: + def length: Int + def success: Boolean + def register(error: Exception): Unit + + def fold[AccrualType](initial: AccrualType) + (lambda: (Optional[FocusType], AccrualType) => PartialFunction[Exception, AccrualType]) + : AccrualType + + def supplement(count: Int, transform: Optional[FocusType] => FocusType): Unit + +class TraceFoci[FocusType]() extends Foci[FocusType]: private val errors: scm.ArrayBuffer[Exception] = scm.ArrayBuffer() private val focuses: scm.ArrayBuffer[Optional[FocusType]] = scm.ArrayBuffer()