Skip to content

Feature request: lazy labels #969

@noresttherein

Description

@noresttherein

Evaluating labels, if they contain formatted input data, can be somewhat expensive. I'd love to see sibling methods, which take a => String argument. I solved it with a very ugly - but working - hack, but it would be great to see it integrated propely.

	private class LazySet[T](lzy : => Set[T]) extends AbstractSet[T] {
		private lazy val evaluated = lzy
		override def contains(elem :T) :Boolean = evaluated.contains(elem)
		override def incl(elem :T) :Set[T] = new LazySet(evaluated + elem)
		override def excl(elem :T) :Set[T] = new LazySet(evaluated - elem)
		override def iterator :Iterator[T] = evaluated.iterator
		override def empty = new LazySet[T](Set.empty[T])
	}

	implicit class PropExtension(private val self :Prop) extends AnyVal {
		def lbl(l : => String) :Prop = self.map { res =>
			res.copy(labels = new LazySet(res.labels + l))
		}
		@inline def lbl_:(l: => String) :Prop = lbl(l)


		def orElse(p : => Prop) = 
			self.combine(Prop.secure(p)) { (first, second) =>
			if (first.failure && second.status.isInstanceOf[Prop.Exception])
				err.println(first.toString + " orElse " + second)
			if (first.success) first
			else second
		}
	}

	implicit class BooleanExtension(private val self :Boolean) extends AnyVal {
		private def prop = Prop(self)

		def lbl(l : => String) :Prop = prop.map { res =>
			res.copy(labels = new LazySet(res.labels + l))
		}
		@inline def lbl_:(l : => String) :Prop = lbl(l)

		def orElse(p : => Prop) = 
			prop.combine(Prop.secure(p)) { (first, second) =>
				if (first.failure && second.status.isInstanceOf[Prop.Exception])
					err.println(first.toString + " orElse " + second)
				if (first.success) first
				else second
			}
	}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions